// For toolbar buttons and separators, remove from the toolbar box.
if (menu->id != NULL && menu->id != (GtkWidget *)1)
{
- GtkWidget *parent_widget = gtk_widget_get_parent(menu->id);
-
- if (parent_widget != NULL)
- gtk_box_remove(GTK_BOX(parent_widget), menu->id);
+ vim_toolbar_remove(VIM_TOOLBAR(gui.toolbar), menu->id);
+ menu->id = NULL;
+ return;
}
menu->id = NULL;
G_DEFINE_TYPE(VimToolbar, vim_toolbar, GTK_TYPE_WIDGET)
- static void vim_toolbar_size_allocate(GtkWidget *widget, int width, int height, int baseline);
- static void vim_toolbar_measure(GtkWidget *widget, GtkOrientation orientation, int for_size, int *minimum, int *natural, int *minimum_baseline, int *natural_baseline);
+static void vim_toolbar_size_allocate(GtkWidget *widget, int width, int height, int baseline);
+static void vim_toolbar_measure(GtkWidget *widget, GtkOrientation orientation, int for_size, int *minimum, int *natural, int *minimum_baseline, int *natural_baseline);
static void
vim_toolbar_dispose(GObject *object)
g_object_set_data(G_OBJECT(btn), "toolbar-width", GINT_TO_POINTER(-1));
}
+/*
+ * Always close overflow popover when button is clicked.
+ */
+ static void
+button_clicked(GtkWidget *widget UNUSED, VimToolbar *self)
+{
+ gtk_menu_button_popdown(GTK_MENU_BUTTON(self->overflow_btn));
+ // Bring focus to drawarea, popping overflow menu down does not change
+ // focus.
+ gtk_widget_grab_focus(gui.drawarea);
+ gui_mch_flush();
+}
+
/*
* Add a new toolbar button at the given index and return the widget. "icon" and
* "text" may be NULL..
set_button_style(btn, self->style, self->iconsize, TRUE);
+ g_signal_connect_object(btn, "clicked",
+ G_CALLBACK(button_clicked), self, G_CONNECT_DEFAULT);
+
vim_toolbar_insert(self, btn, idx);
return btn;
}
gtk_widget_queue_allocate(GTK_WIDGET(self));
}
+/*
+ * Remove the item from the toolbar.
+ */
+ void
+vim_toolbar_remove(VimToolbar *self, GtkWidget *item)
+{
+ gtk_box_remove(GTK_BOX(self->strip),item);
+ self->items = g_list_remove(self->items, item);
+ g_object_unref(item);
+ gtk_widget_queue_allocate(GTK_WIDGET(self));
+}
+
/*
* If "overflow" is TRUE, then move "item" from the toolbar to the overflow, and
* vice versa.