@@ -328,7 +328,8 @@ toolkitgroupview_get_property(GObject *object,
328328 */
329329
330330static void
331- toolkitgroupview_add_kit (Toolkitgroupview * kitgview , GListStore * store , Toolkit * kit )
331+ toolkitgroupview_add_kit (Toolkitgroupview * kitgview ,
332+ GListStore * store , Toolkit * kit )
332333{
333334 if (kit &&
334335 (kitgview -> show_all || MODEL (kit )-> display ) &&
@@ -337,7 +338,8 @@ toolkitgroupview_add_kit(Toolkitgroupview *kitgview, GListStore *store, Toolkit
337338}
338339
339340static void
340- toolkitgroupview_add_tool (Toolkitgroupview * kitgview , GListStore * store , Tool * tool )
341+ toolkitgroupview_add_tool (Toolkitgroupview * kitgview ,
342+ GListStore * store , Tool * tool )
341343{
342344 if (tool &&
343345 (kitgview -> show_all || MODEL (tool )-> display ) &&
@@ -346,7 +348,8 @@ toolkitgroupview_add_tool(Toolkitgroupview *kitgview, GListStore *store, Tool *t
346348}
347349
348350static void
349- toolkitgroupview_add_toolitem (Toolkitgroupview * kitgview , GListStore * store , Toolitem * toolitem )
351+ toolkitgroupview_add_toolitem (Toolkitgroupview * kitgview ,
352+ GListStore * store , Toolitem * toolitem )
350353{
351354 if (toolitem &&
352355 (kitgview -> show_all || MODEL (toolitem -> tool )-> display ) &&
@@ -452,28 +455,42 @@ toolkitgroupview_browse_clicked(GtkWidget *button,
452455
453456 gtk_stack_set_visible_child_name (GTK_STACK (kitgview -> stack ), name );
454457 gtk_stack_remove (GTK_STACK (kitgview -> stack ), last_page );
458+ kitgview -> pinned = FALSE;
455459 }
456460 else {
457461 if (node -> kit ||
458- (node -> toolitem && node -> toolitem -> is_pullright ))
462+ (node -> toolitem && node -> toolitem -> is_pullright )) {
459463 toolkitgroupview_build_browse_page (kitgview , node );
464+ kitgview -> pinned = FALSE;
465+ }
460466
461467 // activate after moving to the new page so listeners can get the new
462468 // page name
463469 toolkitgroupview_activate (kitgview , node -> toolitem , node -> tool );
464470 }
465471}
466472
473+ static void
474+ toolkitgroupview_pin_togggled (GtkCheckButton * check_button ,
475+ Toolkitgroupview * kitgview )
476+ {
477+ kitgview -> pinned = gtk_check_button_get_active (check_button );
478+ }
479+
467480static void
468481toolkitgroupview_setup_browse_item (GtkListItemFactory * factory ,
469482 GtkListItem * item , Toolkitgroupview * kitgview )
470483{
484+ // enclosing box, so we can have the pin me up tick on the right
485+ GtkWidget * enclosing = gtk_box_new (GTK_ORIENTATION_HORIZONTAL , 0 );
486+
471487 GtkWidget * button = gtk_button_new ();
472488 gtk_button_set_has_frame (GTK_BUTTON (button ), FALSE);
473489 gtk_widget_add_css_class (button , "toolkitgroupview-item" );
474490 g_object_set_qdata (G_OBJECT (button ), toolkitgroupview_quark , kitgview );
475491 g_signal_connect (button , "clicked" ,
476492 G_CALLBACK (toolkitgroupview_browse_clicked ), kitgview );
493+ gtk_box_append (GTK_BOX (enclosing ), button );
477494
478495 GtkWidget * box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL , 5 );
479496 gtk_button_set_child (GTK_BUTTON (button ), box );
@@ -492,17 +509,26 @@ toolkitgroupview_setup_browse_item(GtkListItemFactory *factory,
492509 gtk_image_set_from_icon_name (GTK_IMAGE (right ), "go-next-symbolic" );
493510 gtk_box_append (GTK_BOX (box ), right );
494511
495- gtk_list_item_set_child (item , button );
512+ GtkWidget * pin = gtk_check_button_new ();
513+ g_signal_connect (pin , "toggled" ,
514+ G_CALLBACK (toolkitgroupview_pin_togggled ), kitgview );
515+ set_tooltip (pin , "Pin menu in place" );
516+ gtk_box_append (GTK_BOX (enclosing ), pin );
517+
518+ gtk_list_item_set_child (item , enclosing );
496519}
497520
498521static void
499522toolkitgroupview_bind_browse_item (GtkListItemFactory * factory ,
500523 GtkListItem * item , Toolkitgroupview * kitgview )
501524{
502- GtkWidget * button = gtk_list_item_get_child (item );
525+ GtkWidget * enclosing = gtk_list_item_get_child (item );
503526 Node * node = gtk_list_item_get_item (item );
504527 Node * parent = g_object_get_qdata (G_OBJECT (factory ), node_quark );
505528
529+ GtkWidget * button = gtk_widget_get_first_child (enclosing );
530+ GtkWidget * pin = gtk_widget_get_next_sibling (button );
531+
506532 GtkWidget * box = gtk_button_get_child (GTK_BUTTON (button ));
507533 GtkWidget * left = gtk_widget_get_first_child (box );
508534 GtkWidget * label = gtk_widget_get_next_sibling (left );
@@ -517,6 +543,7 @@ toolkitgroupview_bind_browse_item(GtkListItemFactory *factory,
517543 gtk_list_item_get_position (item ) == 0 ) {
518544 gtk_widget_set_visible (left , TRUE);
519545 gtk_widget_set_visible (right , FALSE);
546+ gtk_widget_set_visible (pin , TRUE);
520547 gtk_label_set_xalign (GTK_LABEL (label ), 0.5 );
521548 g_object_set_qdata (G_OBJECT (button ), node_quark , parent );
522549 }
@@ -525,6 +552,7 @@ toolkitgroupview_bind_browse_item(GtkListItemFactory *factory,
525552 gtk_widget_set_visible (right ,
526553 node -> kit ||
527554 (node -> toolitem && node -> toolitem -> is_pullright ));
555+ gtk_widget_set_visible (pin , FALSE);
528556
529557 if (node -> toolitem )
530558 set_tooltip (button , node -> toolitem -> help );
@@ -999,3 +1027,13 @@ toolkitgroupview_new(void)
9991027 return VIEW (kitgview );
10001028}
10011029
1030+ void
1031+ toolkitgroupview_home (Toolkitgroupview * kitgview )
1032+ {
1033+ if (!kitgview -> pinned ) {
1034+ GtkWidget * stack = kitgview -> stack ;
1035+ GtkWidget * root_page = gtk_widget_get_first_child (stack );
1036+
1037+ gtk_stack_set_visible_child (GTK_STACK (stack ), root_page );
1038+ }
1039+ }
0 commit comments