mirror of
https://github.com/netbirdio/systray.git
synced 2026-05-22 17:08:41 -07:00
Block event trigger during checkbox change
This commit is contained in:
+13
-1
@@ -13,6 +13,7 @@ static char temp_file_name[PATH_MAX] = "";
|
||||
typedef struct {
|
||||
GtkWidget *menu_item;
|
||||
int menu_id;
|
||||
long signalHandlerId;
|
||||
} MenuItemNode;
|
||||
|
||||
typedef struct {
|
||||
@@ -95,7 +96,11 @@ gboolean do_add_or_update_menu_item(gpointer data) {
|
||||
gtk_menu_item_set_label(GTK_MENU_ITEM(item->menu_item), mii->title);
|
||||
|
||||
if (mii->isCheckable) {
|
||||
// We need to block the "activate" event, to emulate the same behaviour as in the windows version
|
||||
// A Check/Uncheck does change the checkbox, but does not trigger the checkbox menuItem channel
|
||||
g_signal_handler_block(GTK_CHECK_MENU_ITEM(item->menu_item), item->signalHandlerId);
|
||||
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item->menu_item), mii->checked == 1);
|
||||
g_signal_handler_unblock(GTK_CHECK_MENU_ITEM(item->menu_item), item->signalHandlerId);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -112,11 +117,18 @@ gboolean do_add_or_update_menu_item(gpointer data) {
|
||||
}
|
||||
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);
|
||||
long signalHandlerId = 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));
|
||||
new_item->menu_id = mii->menu_id;
|
||||
new_item->signalHandlerId = signalHandlerId;
|
||||
new_item->menu_item = menu_item;
|
||||
GList* new_node = malloc(sizeof(GList));
|
||||
new_node->data = new_item;
|
||||
|
||||
Reference in New Issue
Block a user