summaryrefslogtreecommitdiff
path: root/openbox
diff options
context:
space:
mode:
Diffstat (limited to 'openbox')
-rw-r--r--openbox/event.c19
-rw-r--r--openbox/menu.c23
-rw-r--r--openbox/menu.h1
3 files changed, 26 insertions, 17 deletions
diff --git a/openbox/event.c b/openbox/event.c
index 5d29dc97..6b372a85 100644
--- a/openbox/event.c
+++ b/openbox/event.c
@@ -93,13 +93,10 @@ static gboolean focus_delay_cmp(gconstpointer d1, gconstpointer d2);
static gboolean focus_delay_func(gpointer data);
static void focus_delay_client_dest(ObClient *client, gpointer data);
-static gboolean menu_hide_delay_func(gpointer data);
-
/* The time for the current event being processed */
Time event_curtime = CurrentTime;
static guint ignore_enter_focus = 0;
-static gboolean menu_can_hide;
static gboolean focus_left_screen = FALSE;
#ifdef USE_SM
@@ -1706,8 +1703,8 @@ static gboolean event_handle_menu(XEvent *ev)
switch (ev->type) {
case ButtonRelease:
- if ((ev->xbutton.button < 4 || ev->xbutton.button > 5)
- && menu_can_hide)
+ if (menu_hide_delay_reached() &&
+ (ev->xbutton.button < 4 || ev->xbutton.button > 5))
{
if ((e = menu_entry_frame_under(ev->xbutton.x_root,
ev->xbutton.y_root)))
@@ -1783,12 +1780,6 @@ static void event_handle_user_input(ObClient *client, XEvent *e)
moved/resized */
client = moveresize_client;
- menu_can_hide = FALSE;
- ob_main_loop_timeout_add(ob_main_loop,
- config_menu_hide_delay * 1000,
- menu_hide_delay_func,
- NULL, g_direct_equal, NULL);
-
if (e->type == ButtonPress ||
e->type == ButtonRelease ||
e->type == MotionNotify)
@@ -1804,12 +1795,6 @@ static void event_handle_user_input(ObClient *client, XEvent *e)
}
}
-static gboolean menu_hide_delay_func(gpointer data)
-{
- menu_can_hide = TRUE;
- return FALSE; /* no repeat */
-}
-
static void focus_delay_dest(gpointer data)
{
g_free(data);
diff --git a/openbox/menu.c b/openbox/menu.c
index 6a217fc6..21c00a31 100644
--- a/openbox/menu.c
+++ b/openbox/menu.c
@@ -20,6 +20,7 @@
#include "debug.h"
#include "menu.h"
#include "openbox.h"
+#include "mainloop.h"
#include "stacking.h"
#include "client.h"
#include "config.h"
@@ -45,6 +46,7 @@ struct _ObMenuParseState
static GHashTable *menu_hash = NULL;
static ObParseInst *menu_parse_inst;
static ObMenuParseState menu_parse_state;
+static gboolean menu_can_hide = FALSE;
static void menu_destroy_hash_value(ObMenu *self);
static void parse_menu_item(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
@@ -384,6 +386,12 @@ void menu_free(ObMenu *menu)
g_hash_table_remove(menu_hash, menu->name);
}
+static gboolean menu_hide_delay_func(gpointer data)
+{
+ menu_can_hide = TRUE;
+ return FALSE; /* no repeat */
+}
+
void menu_show(gchar *name, gint x, gint y, gint button, ObClient *client)
{
ObMenu *self;
@@ -420,6 +428,21 @@ void menu_show(gchar *name, gint x, gint y, gint button, ObClient *client)
break;
}
}
+
+ if (!button)
+ menu_can_hide = TRUE;
+ else {
+ menu_can_hide = FALSE;
+ ob_main_loop_timeout_add(ob_main_loop,
+ config_menu_hide_delay * 1000,
+ menu_hide_delay_func,
+ NULL, g_direct_equal, NULL);
+ }
+}
+
+gboolean menu_hide_delay_reached()
+{
+ return menu_can_hide;
}
static ObMenuEntry* menu_entry_new(ObMenu *menu, ObMenuEntryType type, gint id)
diff --git a/openbox/menu.h b/openbox/menu.h
index 6d4bbd47..591dfb65 100644
--- a/openbox/menu.h
+++ b/openbox/menu.h
@@ -172,6 +172,7 @@ void menu_show_all_shortcuts(ObMenu *self, gboolean show);
void menu_show(gchar *name, gint x, gint y, gint button,
struct _ObClient *client);
+gboolean menu_hide_delay_reached();
void menu_set_show_func(ObMenu *menu, ObMenuShowFunc func);
void menu_set_hide_func(ObMenu *menu, ObMenuHideFunc func);