app: improve extension list widget.

Use GtkGrid instead of GtkBox (docs says GtkBox will eventually go
away). Also remove this horrible frame in a frame (though GUI is still
not perfect yet). Finally fix the "extension" object data.
This commit is contained in:
Jehan 2019-05-27 15:30:39 +02:00
parent 400b564648
commit f67ac0f0ca
1 changed files with 49 additions and 42 deletions

View File

@ -212,8 +212,7 @@ gimp_extension_list_ext_installed (GimpExtensionManager *manager,
GList *iter; GList *iter;
GtkWidget *outframe; GtkWidget *outframe;
GtkWidget *frame; GtkWidget *grid;
GtkWidget *hbox;
GtkWidget *onoff; GtkWidget *onoff;
GtkWidget *delbutton; GtkWidget *delbutton;
GtkWidget *image; GtkWidget *image;
@ -250,37 +249,35 @@ gimp_extension_list_ext_installed (GimpExtensionManager *manager,
} }
g_list_free (rows); g_list_free (rows);
/* Delete button top right of the frame. */ outframe = gtk_frame_new (gimp_extension_get_name (extension));
outframe = gtk_frame_new (NULL);
gtk_frame_set_shadow_type (GTK_FRAME (outframe), GTK_SHADOW_NONE);
gtk_frame_set_label_align (GTK_FRAME (outframe), 1.0, 1.0);
delbutton = gtk_button_new ();
g_object_set_data (G_OBJECT (delbutton), "extension", extension);
g_signal_connect (delbutton, "clicked",
G_CALLBACK (gimp_extension_list_delete_clicked),
list);
gtk_button_set_relief (GTK_BUTTON (delbutton), GTK_RELIEF_NONE);
image = gtk_image_new_from_icon_name (GIMP_ICON_EDIT_DELETE,
GTK_ICON_SIZE_MENU);
gtk_image_set_pixel_size (GTK_IMAGE (image), 12);
gtk_container_add (GTK_CONTAINER (delbutton), image);
gtk_widget_show (image);
gtk_widget_show (delbutton);
gtk_frame_set_label_widget (GTK_FRAME (outframe), delbutton);
gtk_container_add (GTK_CONTAINER (list), outframe); gtk_container_add (GTK_CONTAINER (list), outframe);
g_object_set_data (G_OBJECT (outframe), "extension", extension);
gtk_widget_show (outframe); gtk_widget_show (outframe);
frame = gtk_frame_new (gimp_extension_get_name (extension)); grid = gtk_grid_new ();
gtk_container_add (GTK_CONTAINER (outframe), frame); gtk_grid_set_column_homogeneous (GTK_GRID (grid), FALSE);
g_object_set_data (G_OBJECT (gtk_widget_get_parent (frame)), gtk_grid_set_row_homogeneous (GTK_GRID (grid), FALSE);
"extension", extension); gtk_container_add (GTK_CONTAINER (outframe), grid);
gtk_widget_show (frame); gtk_widget_show (grid);
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 1); /* On/Off switch. */
gtk_container_add (GTK_CONTAINER (frame), hbox); onoff = gtk_switch_new ();
gtk_widget_show (hbox); gtk_widget_set_vexpand (onoff, FALSE);
gtk_widget_set_hexpand (onoff, FALSE);
gtk_widget_set_halign (onoff, GTK_ALIGN_CENTER);
gtk_widget_set_valign (onoff, GTK_ALIGN_CENTER);
gtk_switch_set_active (GTK_SWITCH (onoff),
gimp_extension_manager_is_running (list->p->manager,
extension));
gtk_widget_set_sensitive (onoff,
gimp_extension_manager_can_run (list->p->manager,
extension));
g_signal_connect (onoff, "notify::active",
G_CALLBACK (gimp_extension_switch_active), extension);
gtk_grid_attach (GTK_GRID (grid), onoff, 0, 0, 1, 1);
gtk_widget_show (onoff);
/* Short description. */
if (gimp_extension_get_comment (extension)) if (gimp_extension_get_comment (extension))
{ {
GtkWidget *desc = gtk_text_view_new (); GtkWidget *desc = gtk_text_view_new ();
@ -291,23 +288,32 @@ gimp_extension_list_ext_installed (GimpExtensionManager *manager,
gimp_extension_get_comment (extension), gimp_extension_get_comment (extension),
-1); -1);
gtk_text_view_set_editable (GTK_TEXT_VIEW (desc), FALSE); gtk_text_view_set_editable (GTK_TEXT_VIEW (desc), FALSE);
gtk_box_pack_start (GTK_BOX (hbox), desc, TRUE, TRUE, 1); gtk_widget_set_vexpand (desc, TRUE);
gtk_widget_set_hexpand (desc, TRUE);
gtk_grid_attach (GTK_GRID (grid), desc, 1, 0, 1, 1);
gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (desc), gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (desc),
GTK_WRAP_WORD_CHAR); GTK_WRAP_WORD_CHAR);
gtk_widget_show (desc); gtk_widget_show (desc);
} }
onoff = gtk_switch_new (); /* Delete button. */
gtk_switch_set_active (GTK_SWITCH (onoff), delbutton = gtk_button_new ();
gimp_extension_manager_is_running (list->p->manager, g_object_set_data (G_OBJECT (delbutton), "extension", extension);
extension)); g_signal_connect (delbutton, "clicked",
gtk_widget_set_sensitive (onoff, G_CALLBACK (gimp_extension_list_delete_clicked),
gimp_extension_manager_can_run (list->p->manager, list);
extension)); gtk_button_set_relief (GTK_BUTTON (delbutton), GTK_RELIEF_NONE);
g_signal_connect (onoff, "notify::active", image = gtk_image_new_from_icon_name (GIMP_ICON_EDIT_DELETE,
G_CALLBACK (gimp_extension_switch_active), extension); GTK_ICON_SIZE_MENU);
gtk_box_pack_end (GTK_BOX (hbox), onoff, FALSE, FALSE, 1); gtk_image_set_pixel_size (GTK_IMAGE (image), 12);
gtk_widget_show (onoff); gtk_widget_set_vexpand (delbutton, FALSE);
gtk_widget_set_hexpand (delbutton, FALSE);
gtk_widget_set_halign (delbutton, GTK_ALIGN_END);
gtk_widget_set_valign (delbutton, GTK_ALIGN_START);
gtk_container_add (GTK_CONTAINER (delbutton), image);
gtk_widget_show (image);
gtk_grid_attach (GTK_GRID (grid), delbutton, 2, 0, 1, 1);
gtk_widget_show (delbutton);
} }
static void static void
@ -379,7 +385,8 @@ gimp_extension_row_activated (GtkListBox *box,
GtkListBoxRow *row, GtkListBoxRow *row,
gpointer user_data) gpointer user_data)
{ {
GtkWidget *frame = gtk_bin_get_child (GTK_BIN (row));
g_signal_emit (box, signals[EXTENSION_ACTIVATED], 0, g_signal_emit (box, signals[EXTENSION_ACTIVATED], 0,
g_object_get_data (G_OBJECT (row), g_object_get_data (G_OBJECT (frame), "extension"));
"extension"));
} }