diff options
| author | joesis | 2017-09-12 22:37:40 +0800 | 
|---|---|---|
| committer | GitHub | 2017-09-12 22:37:40 +0800 | 
| commit | 060c06f22e631c46a2d738532bc81c37b0f31595 (patch) | |
| tree | 174769c64d8b1254d4f4203655b42b38f0c0c63e /systray_linux.c | |
| parent | 66e6fad5eea92d7adda31abfae7a5a52070dfae5 (diff) | |
| parent | e00812af2c109a6cfa4c9a4774e4f805b6119290 (diff) | |
| download | systray-060c06f22e631c46a2d738532bc81c37b0f31595.tar.bz2 | |
Merge pull request #31 from getlantern/issue881
Add ability to show/hide menu items
Diffstat (limited to 'systray_linux.c')
| -rw-r--r-- | systray_linux.c | 40 | 
1 files changed, 40 insertions, 0 deletions
| diff --git a/systray_linux.c b/systray_linux.c index 5f57d74..64d7e8f 100644 --- a/systray_linux.c +++ b/systray_linux.c @@ -110,6 +110,34 @@ 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_WIDGET(item->menu_item)); +			break; +		} +	} +	return FALSE; +} + +// 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_WIDGET(item->menu_item)); +			break; +		} +	} +	return FALSE; +} + +// 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 +179,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);  } | 
