changeset 2310:5df7b1431d1a

GTK4: Moved the rest of the menu functions into thread safety to try to fix a X error with popup menus, but it did not work... will have to keep looking.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Wed, 10 Feb 2021 10:18:10 +0000
parents e238178186ff
children f6a6ea6b28fe
files gtk4/dw.c
diffstat 1 files changed, 59 insertions(+), 49 deletions(-) [+]
line wrap: on
line diff
--- a/gtk4/dw.c	Wed Feb 10 09:55:04 2021 +0000
+++ b/gtk4/dw.c	Wed Feb 10 10:18:10 2021 +0000
@@ -2556,7 +2556,10 @@
  *       id: An ID to be used for getting the resource from the
  *           resource file.
  */
-HMENUI dw_menu_new(unsigned long id)
+DW_FUNCTION_DEFINITION(dw_menu_new, HMENUI, ULONG cid)
+DW_FUNCTION_ADD_PARAM1(cid)
+DW_FUNCTION_RETURN(dw_menu_new, HMENUI)
+DW_FUNCTION_RESTORE_PARAM1(cid, ULONG)
 {
    GMenu *tmp = g_menu_new();
    /* Create the initial section and add it to the menu */
@@ -2568,9 +2571,9 @@
 
    g_object_set_data(G_OBJECT(tmp), "_dw_menugroup", GINT_TO_POINTER(++_dw_menugroup));
    g_object_set_data(G_OBJECT(tmp), "_dw_group", (gpointer)group);
-   g_object_set_data(G_OBJECT(tmp), "_dw_id", GINT_TO_POINTER(id));
+   g_object_set_data(G_OBJECT(tmp), "_dw_id", GINT_TO_POINTER(cid));
    g_object_set_data(G_OBJECT(tmp), "_dw_section", (gpointer)section);
-   return tmp;
+   DW_FUNCTION_RETURN_THIS(tmp);
 }
 
 /*
@@ -2838,41 +2841,45 @@
  *       id: Menuitem id.
  *       state: TRUE for checked FALSE for not checked.
  */
-void dw_menu_item_set_state(HMENUI menu, unsigned long id, unsigned long state)
+DW_FUNCTION_DEFINITION(dw_menu_item_set_state, void, HMENUI menu, ULONG cid, ULONG state)
+DW_FUNCTION_ADD_PARAM3(menu, cid, state)
+DW_FUNCTION_NO_RETURN(dw_menu_item_set_state)
+DW_FUNCTION_RESTORE_PARAM3(menu, HMENUI, cid, ULONG, state, ULONG)
 {
    char numbuf[25] = {0};
    GMenuItem *tmphandle;
 
-   if(!menu)
-      return;
-
-   snprintf(numbuf, 24, "%lu", id);
-   tmphandle = _dw_find_submenu_id(menu, numbuf);
-
-   if(tmphandle && G_IS_MENU_ITEM(tmphandle))
-   {
-      GSimpleAction *action = g_object_get_data(G_OBJECT(tmphandle), "_dw_action");
-      
-#if 0
-      if((state & DW_MIS_CHECKED) || (state & DW_MIS_UNCHECKED))
-      {
-         int check = 0;
-
-         if(state & DW_MIS_CHECKED)
-            check = 1;
-
-         if(gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(tmphandle)) != check)
-            gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(tmphandle), check);
-      }
-#endif
-      if((state & DW_MIS_ENABLED) || (state & DW_MIS_DISABLED))
-      {
-         if(state & DW_MIS_ENABLED)
-            g_simple_action_set_enabled(action, TRUE);
-         else
-            g_simple_action_set_enabled(action, FALSE);
-      }
-   }
+   if(menu)
+   {
+      snprintf(numbuf, 24, "%lu", cid);
+      tmphandle = _dw_find_submenu_id(menu, numbuf);
+
+      if(tmphandle && G_IS_MENU_ITEM(tmphandle))
+      {
+         GSimpleAction *action = g_object_get_data(G_OBJECT(tmphandle), "_dw_action");
+         
+   #if 0
+         if((state & DW_MIS_CHECKED) || (state & DW_MIS_UNCHECKED))
+         {
+            int check = 0;
+
+            if(state & DW_MIS_CHECKED)
+               check = 1;
+
+            if(gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(tmphandle)) != check)
+               gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(tmphandle), check);
+         }
+   #endif
+         if((state & DW_MIS_ENABLED) || (state & DW_MIS_DISABLED))
+         {
+            if(state & DW_MIS_ENABLED)
+               g_simple_action_set_enabled(action, TRUE);
+            else
+               g_simple_action_set_enabled(action, FALSE);
+         }
+      }
+   }
+   DW_FUNCTION_RETURN_NOTHING;
 }
 
 /*
@@ -2883,26 +2890,29 @@
  * Returns:
  *       DW_ERROR_NONE (0) on success or DW_ERROR_UNKNOWN on failure.
  */
-int API dw_menu_delete_item(HMENUI menu, unsigned long id)
+DW_FUNCTION_DEFINITION(dw_menu_delete_item, int, HMENUI menu, ULONG cid)
+DW_FUNCTION_ADD_PARAM2(menu, cid)
+DW_FUNCTION_RETURN(dw_menu_delete_item, int)
+DW_FUNCTION_RESTORE_PARAM2(menu, HMENUI, cid, ULONG)
 {
    int ret = DW_ERROR_UNKNOWN;
    char numbuf[25] = {0};
    GMenuItem *tmphandle;
 
-   if(!menu)
-      return ret;
-
-   snprintf(numbuf, 24, "%lu", id);
-   tmphandle = _dw_find_submenu_id(menu, numbuf);
-
-   if(tmphandle && G_IS_MENU_ITEM(tmphandle))
-   {
-      /* g_menu_remove(menu, position); */
-      g_object_unref(G_OBJECT(tmphandle));
-      g_object_set_data(G_OBJECT(menu), numbuf, NULL);
-      ret = DW_ERROR_NONE;
-   }
-   return ret;
+   if(menu)
+   {
+      snprintf(numbuf, 24, "%lu", cid);
+      tmphandle = _dw_find_submenu_id(menu, numbuf);
+
+      if(tmphandle && G_IS_MENU_ITEM(tmphandle))
+      {
+         /* g_menu_remove(menu, position); */
+         g_object_unref(G_OBJECT(tmphandle));
+         g_object_set_data(G_OBJECT(menu), numbuf, NULL);
+         ret = DW_ERROR_NONE;
+      }
+   }
+   DW_FUNCTION_RETURN_THIS(ret);
 }
 
 /* Delayed unparent of the popup menu from the parent */