aboutsummaryrefslogtreecommitdiffstats
path: root/systray_linux.c
diff options
context:
space:
mode:
Diffstat (limited to 'systray_linux.c')
-rw-r--r--systray_linux.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/systray_linux.c b/systray_linux.c
index 1cbebbe..83b4690 100644
--- a/systray_linux.c
+++ b/systray_linux.c
@@ -13,11 +13,11 @@ static GArray *global_temp_icon_file_names = NULL;
typedef struct {
GtkWidget *menu_item;
- char *menu_id;
+ int menu_id;
} MenuItemNode;
typedef struct {
- char* menu_id;
+ int menu_id;
char* title;
char* tooltip;
short disabled;
@@ -62,15 +62,18 @@ gboolean do_set_icon(gpointer data) {
return FALSE;
}
+void _systray_menu_item_selected(int *id) {
+ systray_menu_item_selected(*id);
+}
+
// runs in main thread, should always return FALSE to prevent gtk to execute it again
gboolean do_add_or_update_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(strcmp(item->menu_id, mii->menu_id) == 0){
+ if(item->menu_id == mii->menu_id){
gtk_menu_item_set_label(GTK_MENU_ITEM(item->menu_item), mii->title);
- free(mii->menu_id);
break;
}
}
@@ -78,7 +81,9 @@ gboolean do_add_or_update_menu_item(gpointer data) {
// menu id doesn't exist, add new item
if(it == NULL) {
GtkWidget *menu_item = gtk_menu_item_new_with_label(mii->title);
- g_signal_connect_swapped(G_OBJECT(menu_item), "activate", G_CALLBACK(systray_menu_item_selected), mii->menu_id);
+ int *id = malloc(sizeof(int));
+ *id = mii->menu_id;
+ g_signal_connect_swapped(G_OBJECT(menu_item), "activate", G_CALLBACK(_systray_menu_item_selected), id);
gtk_menu_shell_append(GTK_MENU_SHELL(global_tray_menu), menu_item);
MenuItemNode* new_item = malloc(sizeof(MenuItemNode));
@@ -134,7 +139,7 @@ void setTooltip(char* ctooltip) {
free(ctooltip);
}
-void add_or_update_menu_item(char* menu_id, char* title, char* tooltip, short disabled, short checked) {
+void add_or_update_menu_item(int menu_id, char* title, char* tooltip, short disabled, short checked) {
MenuItemInfo *mii = malloc(sizeof(MenuItemInfo));
mii->menu_id = menu_id;
mii->title = title;