aboutsummaryrefslogtreecommitdiffstats
path: root/systray_linux.c
diff options
context:
space:
mode:
Diffstat (limited to 'systray_linux.c')
-rw-r--r--systray_linux.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/systray_linux.c b/systray_linux.c
index 5f57d74..fd0f1c2 100644
--- a/systray_linux.c
+++ b/systray_linux.c
@@ -110,6 +110,32 @@ gboolean do_add_or_update_menu_item(gpointer data) {
}
// runs in main thread, should always return FALSE to prevent gtk to execute it again
+gboolean do_hide_menu_item(gpointer data) {
+ MenuItemInfo *mii = (MenuItemInfo*)data;
+ GList* it;
+ for(it = global_menu_items; it != NULL; it = it->next) {
+ MenuItemNode* item = (MenuItemNode*)(it->data);
+ if(item->menu_id == mii->menu_id){
+ gtk_widget_hide(GTK_MENU_ITEM(item->menu_item));
+ return;
+ }
+ }
+}
+
+// runs in main thread, should always return FALSE to prevent gtk to execute it again
+gboolean do_show_menu_item(gpointer data) {
+ MenuItemInfo *mii = (MenuItemInfo*)data;
+ GList* it;
+ for(it = global_menu_items; it != NULL; it = it->next) {
+ MenuItemNode* item = (MenuItemNode*)(it->data);
+ if(item->menu_id == mii->menu_id){
+ gtk_widget_show(GTK_MENU_ITEM(item->menu_item));
+ return;
+ }
+ }
+}
+
+// runs in main thread, should always return FALSE to prevent gtk to execute it again
gboolean do_quit(gpointer data) {
int i;
for (i = 0; i < INT_MAX; ++i) {
@@ -151,6 +177,18 @@ void add_or_update_menu_item(int menu_id, char* title, char* tooltip, short disa
g_idle_add(do_add_or_update_menu_item, mii);
}
+void hide_menu_item(int menu_id) {
+ MenuItemInfo *mii = malloc(sizeof(MenuItemInfo));
+ mii->menu_id = menu_id;
+ g_idle_add(do_hide_menu_item, mii);
+}
+
+void show_menu_item(int menu_id) {
+ MenuItemInfo *mii = malloc(sizeof(MenuItemInfo));
+ mii->menu_id = menu_id;
+ g_idle_add(do_show_menu_item, mii);
+}
+
void quit() {
g_idle_add(do_quit, NULL);
}