merge r5808-5813 from trunk
authorDana Jansens <danakj@orodu.net>
Sun, 22 Apr 2007 22:58:52 +0000 (22:58 +0000)
committerDana Jansens <danakj@orodu.net>
Sun, 22 Apr 2007 22:58:52 +0000 (22:58 +0000)
openbox/client.c
openbox/event.c
openbox/focus.c
openbox/frame.c
tests/hideshow.py [new file with mode: 0755]

index a65e7400313367609d03a8f92eab07494350423c..76db97bc82b0da54721fe384e795f9123796b6d2 100644 (file)
@@ -506,6 +506,10 @@ void client_unmanage(ObClient *self)
 
     g_assert(self != NULL);
 
+    /* we dont want events no more. do this before hiding the frame so we
+       don't generate more events */
+    XSelectInput(ob_display, self->window, NoEventMask);
+
     frame_hide(self->frame);
     /* sync to send the hide to the server quickly, and to get back the enter
        events */
@@ -524,9 +528,6 @@ void client_unmanage(ObClient *self)
     /* remove the window from our save set */
     XChangeSaveSet(ob_display, self->window, SetModeDelete);
 
-    /* we dont want events no more */
-    XSelectInput(ob_display, self->window, NoEventMask);
-
     /* update the focus lists */
     focus_order_remove(self);
 
index f9d5c38fe881aba5e598ca8bbab7d8e69ec777aa..5bb0e2a09f4971d207bbde7e57a130e3a2da17b1 100644 (file)
@@ -372,6 +372,9 @@ static gboolean wanted_focusevent(XEvent *e)
         /* This means focus moved from one client to another */
         if (detail == NotifyNonlinearVirtual)
             return TRUE;
+        /* This means focus had moved to our frame window and now moved off */
+        if (detail == NotifyNonlinear)
+            return TRUE;
 
         /* Otherwise.. */
         return FALSE;
@@ -391,8 +394,6 @@ static gboolean event_ignore(XEvent *e, ObClient *client)
             return TRUE;
         break;
     case FocusOut:
-        if (client == NULL)
-            return TRUE;
         if (!wanted_focusevent(e))
             return TRUE;
         break;
index f794e4666c245ea1a8858c6bd28d2c2d0695cc3f..31fa0ef9b320d40cfe13f3d1d85175191bbad011 100644 (file)
@@ -336,8 +336,7 @@ void focus_cycle_draw_indicator()
         XUnmapWindow(ob_display, focus_indicator.bottom.win);
 
         /* kill enter events cause by this unmapping */
-        XSync(ob_display, FALSE);
-        while (XCheckTypedEvent(ob_display, EnterNotify, &e));
+        event_ignore_queued_enters();
     } else {
         /*
           if (focus_cycle_target)
index 991e9adc71872a38900362c81bcdc6daecb42b77..a669f20ddd138c6c021b06b020e377dd673c62f9 100644 (file)
@@ -29,8 +29,7 @@
 #include "moveresize.h"
 #include "render/theme.h"
 
-#define PLATE_EVENTMASK (SubstructureRedirectMask | ButtonPressMask | \
-                         FocusChangeMask)
+#define PLATE_EVENTMASK (ButtonPressMask | FocusChangeMask)
 #define FRAME_EVENTMASK (EnterWindowMask | LeaveWindowMask | \
                          ButtonPressMask | ButtonReleaseMask | \
                          VisibilityChangeMask)
diff --git a/tests/hideshow.py b/tests/hideshow.py
new file mode 100755 (executable)
index 0000000..2e7fc3a
--- /dev/null
@@ -0,0 +1,78 @@
+#!/usr/bin/env python
+
+import pygtk
+import gtk
+import gobject
+pygtk.require('2.0')
+
+class FolderSelector(gtk.Window):
+    def __init__(self, jules):
+        gtk.Window.__init__(self, gtk.WINDOW_TOPLEVEL)
+        print "init folder selector", self, jules
+        self.set_title("Select Folder")
+        self.jules = jules
+
+        self.set_size_request(140, 200)
+
+        self.list_model = gtk.ListStore(gobject.TYPE_STRING)
+        self.tree = gtk.TreeView(self.list_model)
+        self.folder_column = gtk.TreeViewColumn('Folder')
+        self.tree.append_column(self.folder_column)
+
+        self.folder_cell = gtk.CellRendererText()
+        self.folder_column.pack_start(self.folder_cell, True)
+        self.folder_column.add_attribute(self.folder_cell, 'text', 0)
+
+        self.tree.set_search_column(0)
+
+        self.icon_theme = gtk.icon_theme_get_default()
+
+        self.add(self.tree)
+        self.show_all()
+        self.tree.columns_autosize()
+        print "done init"
+
+class Jules(gtk.Window):
+    def __init__(self):
+        gtk.Window.__init__(self, gtk.WINDOW_TOPLEVEL)
+        self.set_title("Jules")
+        self.set_size_request(150, 320)
+        self.connect("delete_event", self.on_delete_event)
+        self.connect("destroy", self.on_destroy)
+        self.scroll = gtk.ScrolledWindow()
+
+        self.tree_model = gtk.TreeStore(gobject.TYPE_STRING,
+                                        gobject.TYPE_STRING)
+        self.tree = gtk.TreeView(self.tree_model)
+        self.file_column = gtk.TreeViewColumn('name', gtk.CellRendererText(),
+                                              markup=0)
+        self.file_column.set_sort_indicator(True)
+        self.file_column.set_clickable(True)
+        self.file_column.set_sort_column_id(1)
+        self.tree.append_column(self.file_column)
+        self.tree.set_headers_clickable(True)
+        self.tree.set_search_column(0)
+
+        self.scroll.add(self.tree)
+        self.add(self.scroll)
+        self.show_all()
+
+        self.project_selector = FolderSelector(self)
+        self.project_selector.hide()
+        self.project_selector.hide()
+
+        self.project_selector.show()
+
+    def on_delete_event(self, widget, event):
+        return False
+
+    def on_destroy(self, widget):
+        gtk.main_quit()
+
+    def run(self):
+        gtk.main()
+
+
+if __name__ == "__main__":
+    jules = Jules()
+    jules.run()