summaryrefslogtreecommitdiff
path: root/openbox
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2003-09-10 19:37:52 +0000
committerDana Jansens <danakj@orodu.net>2003-09-10 19:37:52 +0000
commit0453a1dbedddadddf31c8ca40e1326e7c34d6362 (patch)
tree172debc6fa31f7d8f6f2033b43bc95fef0b11f8c /openbox
parent8d68a400d43f166fcbe89844f42fb0157a24084c (diff)
make menu hiding-on-release based on a timer rather than on where it is released (on the frame border)
Diffstat (limited to 'openbox')
-rw-r--r--openbox/event.c27
1 files changed, 20 insertions, 7 deletions
diff --git a/openbox/event.c b/openbox/event.c
index b5ad2924..f5b2ec48 100644
--- a/openbox/event.c
+++ b/openbox/event.c
@@ -45,6 +45,8 @@ static void event_handle_client(ObClient *c, XEvent *e);
static gboolean focus_delay_func(gpointer data);
static void focus_delay_client_dest(gpointer data);
+static gboolean menu_hide_delay_func(gpointer data);
+
#define INVALID_FOCUSIN(e) ((e)->xfocus.detail == NotifyInferior || \
(e)->xfocus.detail == NotifyAncestor || \
(e)->xfocus.detail > NotifyNonlinearVirtual)
@@ -70,6 +72,8 @@ static int mask_table_size;
static ObClient *focus_delay_client;
+static gboolean menu_can_hide;
+
#ifdef USE_SM
static void ice_handler(int fd, gpointer conn)
{
@@ -492,6 +496,12 @@ static void event_process(const XEvent *ec, gpointer data)
if (moveresize_in_progress)
moveresize_event(e);
+ menu_can_hide = FALSE;
+ ob_main_loop_timeout_add(ob_main_loop,
+ G_USEC_PER_SEC / 4,
+ menu_hide_delay_func,
+ NULL, NULL);
+
if (e->type == ButtonPress || e->type == ButtonRelease ||
e->type == MotionNotify)
mouse_event(client, e);
@@ -1122,14 +1132,11 @@ static void event_handle_menu(XEvent *ev)
switch (ev->type) {
case ButtonRelease:
- if (!(f = menu_frame_under(ev->xbutton.x_root,
- ev->xbutton.y_root)))
+ if ((e = menu_entry_frame_under(ev->xbutton.x_root,
+ ev->xbutton.y_root)))
+ menu_entry_frame_execute(e, ev->xbutton.state);
+ else if (menu_can_hide)
menu_frame_hide_all();
- else {
- if ((e = menu_entry_frame_under(ev->xbutton.x_root,
- ev->xbutton.y_root)))
- menu_entry_frame_execute(e, ev->xbutton.state);
- }
break;
case MotionNotify:
if ((f = menu_frame_under(ev->xmotion.x_root,
@@ -1168,6 +1175,12 @@ static void event_handle_menu(XEvent *ev)
}
}
+static gboolean menu_hide_delay_func(gpointer data)
+{
+ menu_can_hide = TRUE;
+ return FALSE; /* no repeat */
+}
+
static gboolean focus_delay_func(gpointer data)
{
client_focus(focus_delay_client);