Mercurial > dwindows
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); |