]> Dogcows Code - chaz/openbox/blobdiff - openbox/keyboard.c
make popup dialogs appear on the active monitor with xinerama
[chaz/openbox] / openbox / keyboard.c
index 432599e8245ba68e968664e8e419d3f87a0443a7..06cd7525bf9fd5c4d6de32eb8be94b462a0e7e51 100644 (file)
@@ -31,6 +31,7 @@
 #include "config.h"
 #include "keytree.h"
 #include "keyboard.h"
+#include "translate.h"
 #include "moveresize.h"
 #include "popup.h"
 #include "gettext.h"
@@ -77,15 +78,16 @@ static gboolean chain_timeout(gpointer data)
 
 static void set_curpos(KeyBindingTree *newpos)
 {
-    if (curpos != newpos) {
-        grab_keys(FALSE);
-        curpos = newpos;
-        grab_keys(TRUE);
-    }
+    if (curpos == newpos) return;
+
+    grab_keys(FALSE);
+    curpos = newpos;
+    grab_keys(TRUE);
 
     if (curpos != NULL) {
         gchar *text = NULL;
         GList *it;
+        Rect *a;
 
         for (it = curpos->keylist; it; it = g_list_next(it)) {
             gchar *oldtext = text;
@@ -96,7 +98,8 @@ static void set_curpos(KeyBindingTree *newpos)
             g_free(oldtext);
         }
 
-        popup_position(popup, NorthWestGravity, 10, 10);
+        a = screen_physical_area_monitor_active();
+        popup_position(popup, NorthWestGravity, a->x + 10, a->y + 10);
         /* 1 second delay for the popup to show */
         popup_delay_show(popup, G_USEC_PER_SEC, text);
         g_free(text);
@@ -292,16 +295,7 @@ void keyboard_event(ObClient *client, const XEvent *e)
         p = curpos->first_child;
     while (p) {
         if (p->key == e->xkey.keycode &&
-            /* tricksy.
-               if you have Super_L and Super_R bound to different modXmasks,
-               this makes either mod mask count as Super
-
-               e.g. Super_L is mod1 and Super_R is mod2, so..
-               p->state = 00011
-               key state is just Super_L so 00001
-               00011 | 00001 == 00011 == p->state
-            */
-            (p->state | e->xkey.state) == p->state)
+            p->state == e->xkey.state)
         {
             /* if we hit a key binding, then close any open menus and run it */
             if (menu_frame_visible)
@@ -319,14 +313,6 @@ void keyboard_event(ObClient *client, const XEvent *e)
             else {
                 keyboard_reset_chains(0);
 
-                /* If we don't have the keyboard grabbed, then ungrab it with
-                   XUngrabKeyboard, so that there is not a passive grab left
-                   on from the KeyPress. If the grab is left on, and focus
-                   moves during that time, it will be NotifyWhileGrabbed, and
-                   applications like to ignore those! */
-                if (!keyboard_interactively_grabbed())
-                    XUngrabKeyboard(ob_display, e->xkey.time);
-
                 action_run_key(p->actions, client, e->xkey.state,
                                e->xkey.x_root, e->xkey.y_root,
                                e->xkey.time);
@@ -346,6 +332,7 @@ void keyboard_startup(gboolean reconfig)
 {
     grab_keys(TRUE);
     popup = popup_new(FALSE);
+    popup_set_text_align(popup, RR_JUSTIFY_CENTER);
 
     if (!reconfig)
         client_add_destroy_notify(keyboard_interactive_end_client, NULL);
This page took 0.021867 seconds and 4 git commands to generate.