all repos — openbox @ 3fd74abb3c2969f170d727154245cde3ef8a4b87

openbox fork - make it a bit more like ryudo

add cleanup function for menus that fires when the menu is no longer visible
Dana Jansens danakj@orodu.net
commit

3fd74abb3c2969f170d727154245cde3ef8a4b87

parent

523a726c6c2f31da36a0af985d22f3792a8c09b5

3 files changed, 26 insertions(+), 2 deletions(-)

jump to
M openbox/menu.copenbox/menu.c

@@ -654,6 +654,11 @@ self->execute_func = func;

self->more_menu->execute_func = func; /* keep it in sync */ } +void menu_set_cleanup_func(ObMenu *self, ObMenuCleanupFunc func) +{ + self->cleanup_func = func; +} + void menu_set_destroy_func(ObMenu *self, ObMenuDestroyFunc func) { self->destroy_func = func;
M openbox/menu.hopenbox/menu.h

@@ -43,6 +43,7 @@ typedef void (*ObMenuExecuteFunc)(struct _ObMenuEntry *entry,

struct _ObMenuFrame *frame, struct _ObClient *client, guint state, gpointer data); +typedef void (*ObMenuCleanupFunc)(struct _ObMenu *menu, gpointer data); typedef void (*ObMenuDestroyFunc)(struct _ObMenu *menu, gpointer data); /*! @param x is the mouse x coordinate. on return it should be the x coordinate for the menu

@@ -83,6 +84,7 @@ ObMenuShowFunc show_func;

ObMenuHideFunc hide_func; ObMenuUpdateFunc update_func; ObMenuExecuteFunc execute_func; + ObMenuCleanupFunc cleanup_func; ObMenuDestroyFunc destroy_func; ObMenuPlaceFunc place_func;

@@ -176,11 +178,24 @@ void menu_show(gchar *name, gint x, gint y, gboolean mouse,

struct _ObClient *client); gboolean menu_hide_delay_reached(void); +/*! The show function is called right after a menu is shown */ void menu_set_show_func(ObMenu *menu, ObMenuShowFunc func); +/*! The hide function is called right before a menu is hidden */ void menu_set_hide_func(ObMenu *menu, ObMenuHideFunc func); +/*! The update function is called when the menu should refresh its + contents, generally right before it is shown */ void menu_set_update_func(ObMenu *menu, ObMenuUpdateFunc func); +/*! The execute function is called when a user chooses to execute an + entry in the menu */ void menu_set_execute_func(ObMenu *menu, ObMenuExecuteFunc func); +/*! The cleanup function is called after a menu is hidden, allowing it + to be cleaned up between uses */ +void menu_set_cleanup_func(ObMenu *menu, ObMenuCleanupFunc func); +/*! The destroy function is called when the menu is being destroyed + permanently */ void menu_set_destroy_func(ObMenu *menu, ObMenuDestroyFunc func); +/*! The place function is called when the menu is being shown and allows + the menu to choose its initial position */ void menu_set_place_func(ObMenu *menu, ObMenuPlaceFunc func); /* functions for building menus */
M openbox/menuframe.copenbox/menuframe.c

@@ -1061,14 +1061,15 @@ }

static void menu_frame_hide(ObMenuFrame *self) { + ObMenu *const menu = self->menu; GList *it = g_list_find(menu_frame_visible, self); gulong ignore_start; if (!it) return; - if (self->menu->hide_func) - self->menu->hide_func(self, self->menu->data); + if (menu->hide_func) + menu->hide_func(self, menu->data); if (self->child) menu_frame_hide(self->child);

@@ -1095,6 +1096,9 @@ XUnmapWindow(obt_display, self->window);

event_end_ignore_all_enters(ignore_start); menu_frame_free(self); + + if (menu->cleanup_func) + menu->cleanup_func(menu, menu->data); } void menu_frame_hide_all(void)