From d1923b53228d1a25f93d517d4a874bee6706883d Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Sun, 22 Apr 2007 22:58:52 +0000 Subject: [PATCH] merge r5808-5813 from trunk --- openbox/client.c | 7 +++-- openbox/event.c | 5 +-- openbox/focus.c | 3 +- openbox/frame.c | 3 +- tests/hideshow.py | 78 +++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 87 insertions(+), 9 deletions(-) create mode 100755 tests/hideshow.py diff --git a/openbox/client.c b/openbox/client.c index a65e7400..76db97bc 100644 --- a/openbox/client.c +++ b/openbox/client.c @@ -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); diff --git a/openbox/event.c b/openbox/event.c index f9d5c38f..5bb0e2a0 100644 --- a/openbox/event.c +++ b/openbox/event.c @@ -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; diff --git a/openbox/focus.c b/openbox/focus.c index f794e466..31fa0ef9 100644 --- a/openbox/focus.c +++ b/openbox/focus.c @@ -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) diff --git a/openbox/frame.c b/openbox/frame.c index 991e9adc..a669f20d 100644 --- a/openbox/frame.c +++ b/openbox/frame.c @@ -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 index 00000000..2e7fc3ae --- /dev/null +++ b/tests/hideshow.py @@ -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() -- 2.34.1