summaryrefslogtreecommitdiff
path: root/java/org/gnu/emacs/EmacsService.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/org/gnu/emacs/EmacsService.java')
-rw-r--r--java/org/gnu/emacs/EmacsService.java43
1 files changed, 41 insertions, 2 deletions
diff --git a/java/org/gnu/emacs/EmacsService.java b/java/org/gnu/emacs/EmacsService.java
index c008300dd3a..f935b63fa0d 100644
--- a/java/org/gnu/emacs/EmacsService.java
+++ b/java/org/gnu/emacs/EmacsService.java
@@ -29,6 +29,7 @@ import android.graphics.Point;
import android.view.View;
import android.view.InputDevice;
+import android.view.KeyEvent;
import android.annotation.TargetApi;
import android.app.Service;
@@ -150,13 +151,13 @@ public class EmacsService extends Service
/* Functions from here on must only be called from the Emacs
thread. */
- void
+ public void
runOnUiThread (Runnable runnable)
{
handler.post (runnable);
}
- EmacsView
+ public EmacsView
getEmacsView (final EmacsWindow window, final int visibility,
final boolean isFocusedByDefault)
{
@@ -197,6 +198,38 @@ public class EmacsService extends Service
}
public void
+ getLocationOnScreen (final EmacsView view, final int[] coordinates)
+ {
+ Runnable runnable;
+
+ runnable = new Runnable () {
+ public void
+ run ()
+ {
+ synchronized (this)
+ {
+ view.getLocationOnScreen (coordinates);
+ notify ();
+ }
+ }
+ };
+
+ synchronized (runnable)
+ {
+ runOnUiThread (runnable);
+
+ try
+ {
+ runnable.wait ();
+ }
+ catch (InterruptedException e)
+ {
+ EmacsNative.emacsAbort ();
+ }
+ }
+ }
+
+ public void
fillRectangle (EmacsDrawable drawable, EmacsGC gc,
int x, int y, int width, int height)
{
@@ -368,4 +401,10 @@ public class EmacsService extends Service
return false;
}
+
+ public String
+ nameKeysym (int keysym)
+ {
+ return KeyEvent.keyCodeToString (keysym);
+ }
};