comparison gtk4/dw.c @ 2286:2d282d8fe911

GTK4: Change to how the action name is created, don't use the menu label... instead use the handle to the menu and the menu id... so there are never any invalid characters in it.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Wed, 03 Feb 2021 22:39:16 +0000
parents 3361ce6070ce
children 680212c356e3
comparison
equal deleted inserted replaced
2285:5113afb0aea9 2286:2d282d8fe911
2243 } 2243 }
2244 *menu = NULL; 2244 *menu = NULL;
2245 } 2245 }
2246 } 2246 }
2247 2247
2248 char _dw_removetilde(char *action, char *dest, const char *src) 2248 char _dw_removetilde(char *dest, const char *src)
2249 { 2249 {
2250 int z, cur=0; 2250 int z, cur=0;
2251 char accel = '\0'; 2251 char accel = '\0';
2252 2252
2253 for(z=0;z<strlen(src);z++) 2253 for(z=0;z<strlen(src);z++)
2254 { 2254 {
2255 if(src[z] == '~') 2255 if(src[z] == '~')
2256 { 2256 {
2257 action[cur] = dest[cur] = '_'; 2257 dest[cur] = '_';
2258 accel = src[z+1]; 2258 accel = src[z+1];
2259 } 2259 }
2260 else if(src[z] == ' ') 2260 else
2261 {
2262 action[cur] = '_';
2263 dest[cur] = src[z]; 2261 dest[cur] = src[z];
2264 }
2265 else
2266 {
2267 action[cur] = src[z];
2268 dest[cur] = src[z];
2269 }
2270 cur++; 2262 cur++;
2271 } 2263 }
2272 dest[cur] = 0; 2264 dest[cur] = 0;
2273 return accel; 2265 return accel;
2274 } 2266 }
2289 { 2281 {
2290 GSimpleAction *action = NULL; 2282 GSimpleAction *action = NULL;
2291 GMenuItem *tmphandle = NULL; 2283 GMenuItem *tmphandle = NULL;
2292 GMenuModel *menumodel; 2284 GMenuModel *menumodel;
2293 char *temptitle = alloca(strlen(title)+1); 2285 char *temptitle = alloca(strlen(title)+1);
2294 char *tempaction = alloca(strlen(title)+1);
2295 int submenucount; 2286 int submenucount;
2296 2287
2297 if(!menu) 2288 if(!menu)
2298 return 0; 2289 return 0;
2299 2290
2300 if(GTK_IS_POPOVER_MENU_BAR(menu)) 2291 if(GTK_IS_POPOVER_MENU_BAR(menu))
2301 menumodel = gtk_popover_menu_bar_get_menu_model(GTK_POPOVER_MENU_BAR(menu)); 2292 menumodel = gtk_popover_menu_bar_get_menu_model(GTK_POPOVER_MENU_BAR(menu));
2302 else 2293 else
2303 menumodel = gtk_popover_menu_get_menu_model(GTK_POPOVER_MENU(menu)); 2294 menumodel = gtk_popover_menu_get_menu_model(GTK_POPOVER_MENU(menu));
2304 _dw_removetilde(tempaction, temptitle, title); 2295 _dw_removetilde(temptitle, title);
2305 submenucount = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(menu), "_dw_submenucount")); 2296 submenucount = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(menu), "_dw_submenucount"));
2306 2297
2307 if (strlen(temptitle) == 0) 2298 if (strlen(temptitle) == 0)
2308 tmphandle = g_menu_item_new_section(NULL, NULL); 2299 tmphandle = g_menu_item_new_section(NULL, NULL);
2309 else 2300 else
2327 } 2318 }
2328 else 2319 else
2329 { 2320 {
2330 char numbuf[25] = {0}; 2321 char numbuf[25] = {0};
2331 2322
2332 snprintf(tempbuf, 100, "menu.%s", tempaction); 2323 snprintf(tempbuf, 100, "menu.%llu-%lu", DW_POINTER_TO_ULONGLONG(menu), id);
2333 action = g_simple_action_new(tempbuf, NULL); 2324 action = g_simple_action_new(tempbuf, NULL);
2334 g_object_ref(G_OBJECT(action)); 2325 g_object_ref(G_OBJECT(action));
2335 tmphandle=g_menu_item_new(temptitle, tempbuf); 2326 tmphandle=g_menu_item_new(temptitle, tempbuf);
2336 snprintf(numbuf, 24, "%lu", id); 2327 snprintf(numbuf, 24, "%lu", id);
2337 g_object_set_data(G_OBJECT(menu), numbuf, (gpointer)tmphandle); 2328 g_object_set_data(G_OBJECT(menu), numbuf, (gpointer)tmphandle);