Skip to content

Commit b88cc5c

Browse files
committed
add menu pin button
1 parent 9764e8f commit b88cc5c

File tree

3 files changed

+50
-7
lines changed

3 files changed

+50
-7
lines changed

src/toolkitgroupview.c

Lines changed: 44 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -328,7 +328,8 @@ toolkitgroupview_get_property(GObject *object,
328328
*/
329329

330330
static 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

339340
static 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

348350
static 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+
467480
static void
468481
toolkitgroupview_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

498521
static void
499522
toolkitgroupview_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+
}

src/toolkitgroupview.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ struct _Toolkitgroupview {
6565
GtkWidget *search_entry;
6666
GtkWidget *scrolled_window;
6767
GtkWidget *list_view;
68+
69+
gboolean pinned;
6870
};
6971

7072
typedef struct _ToolkitgroupviewClass {
@@ -74,3 +76,4 @@ typedef struct _ToolkitgroupviewClass {
7476

7577
GType toolkitgroupview_get_type(void);
7678
View *toolkitgroupview_new(void);
79+
void toolkitgroupview_home(Toolkitgroupview *kitgview);

src/workspaceview.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -440,8 +440,10 @@ workspaceview_kitg_activate(Toolkitgroupview *kitgview,
440440

441441
if (workspace_add_action(ws,
442442
toolitem->name, toolitem->action,
443-
toolitem->action_sym->expr->compile->nparam))
443+
toolitem->action_sym->expr->compile->nparam)) {
444444
workspace_set_modified(ws, TRUE);
445+
toolkitgroupview_home(kitgview);
446+
}
445447
else
446448
workspace_set_show_error(ws, TRUE);
447449
}

0 commit comments

Comments
 (0)