Using a toolbar to list the actions available

This commit is contained in:
Pierre Pronchery 2013-10-05 02:31:49 +02:00
parent afa9a153e7
commit c0119f7034

View File

@ -40,6 +40,7 @@ typedef struct _BrowserPlugin
/* widgets */ /* widgets */
GtkWidget * widget; GtkWidget * widget;
GtkWidget * name; GtkWidget * name;
GtkWidget * toolbar;
GtkWidget * open; GtkWidget * open;
GtkWidget * edit; GtkWidget * edit;
GtkWidget * view_image; GtkWidget * view_image;
@ -83,7 +84,6 @@ static Preview * _preview_init(BrowserPluginHelper * helper)
{ {
Preview * preview; Preview * preview;
PangoFontDescription * font; PangoFontDescription * font;
GtkSizeGroup * group;
GtkWidget * vbox; GtkWidget * vbox;
GtkWidget * widget; GtkWidget * widget;
@ -93,9 +93,23 @@ static Preview * _preview_init(BrowserPluginHelper * helper)
preview->path = NULL; preview->path = NULL;
preview->source = 0; preview->source = 0;
/* widgets */ /* widgets */
group = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
vbox = gtk_vbox_new(FALSE, 4); vbox = gtk_vbox_new(FALSE, 4);
preview->widget = vbox; preview->widget = vbox;
/* toolbar */
preview->toolbar = gtk_toolbar_new();
gtk_widget_set_no_show_all(preview->toolbar, TRUE);
/* mime */
preview->open = gtk_tool_button_new_from_stock(GTK_STOCK_OPEN);
g_signal_connect_swapped(preview->open, "clicked", G_CALLBACK(
_preview_on_open), preview);
gtk_toolbar_insert(GTK_TOOLBAR(preview->toolbar),
GTK_TOOL_ITEM(preview->open), -1);
preview->edit = gtk_tool_button_new_from_stock(GTK_STOCK_EDIT);
g_signal_connect_swapped(preview->edit, "clicked", G_CALLBACK(
_preview_on_edit), preview);
gtk_toolbar_insert(GTK_TOOLBAR(preview->toolbar),
GTK_TOOL_ITEM(preview->edit), -1);
gtk_box_pack_start(GTK_BOX(vbox), preview->toolbar, FALSE, TRUE, 0);
/* name */ /* name */
preview->name = gtk_label_new(NULL); preview->name = gtk_label_new(NULL);
gtk_label_set_ellipsize(GTK_LABEL(preview->name), gtk_label_set_ellipsize(GTK_LABEL(preview->name),
@ -106,21 +120,6 @@ static Preview * _preview_init(BrowserPluginHelper * helper)
gtk_widget_modify_font(preview->name, font); gtk_widget_modify_font(preview->name, font);
pango_font_description_free(font); pango_font_description_free(font);
gtk_box_pack_start(GTK_BOX(vbox), preview->name, FALSE, TRUE, 0); gtk_box_pack_start(GTK_BOX(vbox), preview->name, FALSE, TRUE, 0);
/* mime */
widget = gtk_hbox_new(FALSE, 4);
preview->open = gtk_button_new_from_stock(GTK_STOCK_OPEN);
gtk_size_group_add_widget(group, preview->open);
g_signal_connect_swapped(preview->open, "clicked", G_CALLBACK(
_preview_on_open), preview);
gtk_box_pack_start(GTK_BOX(widget), preview->open, FALSE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(vbox), widget, FALSE, TRUE, 0);
widget = gtk_hbox_new(FALSE, 4);
preview->edit = gtk_button_new_from_stock(GTK_STOCK_EDIT);
gtk_size_group_add_widget(group, preview->edit);
g_signal_connect_swapped(preview->edit, "clicked", G_CALLBACK(
_preview_on_edit), preview);
gtk_box_pack_start(GTK_BOX(widget), preview->edit, FALSE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(vbox), widget, FALSE, TRUE, 0);
/* image */ /* image */
preview->view_image = gtk_image_new(); preview->view_image = gtk_image_new();
gtk_widget_set_no_show_all(preview->view_image, TRUE); gtk_widget_set_no_show_all(preview->view_image, TRUE);
@ -175,8 +174,8 @@ static void _preview_refresh(Preview * preview, GList * selection)
{ {
char * path = (selection != NULL) ? selection->data : NULL; char * path = (selection != NULL) ? selection->data : NULL;
Mime * mime = preview->helper->get_mime(preview->helper->browser); Mime * mime = preview->helper->get_mime(preview->helper->browser);
char const image[] = "image/"; char const image[6] = "image/";
char const text[] = "text/"; char const text[5] = "text/";
char const * types[] = { "application/x-perl", char const * types[] = { "application/x-perl",
"application/x-shellscript", "application/x-shellscript",
"application/xml", "application/xml",
@ -192,9 +191,9 @@ static void _preview_refresh(Preview * preview, GList * selection)
if((type = mime_type(mime, path)) == NULL) if((type = mime_type(mime, path)) == NULL)
return; return;
_refresh_mime(preview, mime, type); _refresh_mime(preview, mime, type);
if(strncmp(type, image, sizeof(image) - 1) == 0) if(strncmp(type, image, sizeof(image)) == 0)
preview->source = g_idle_add(_preview_on_idle_image, preview); preview->source = g_idle_add(_preview_on_idle_image, preview);
else if(strncmp(type, text, sizeof(text) - 1) == 0) else if(strncmp(type, text, sizeof(text)) == 0)
preview->source = g_idle_add(_preview_on_idle_text, preview); preview->source = g_idle_add(_preview_on_idle_text, preview);
else else
for(i = 0; i < sizeof(types) / sizeof(*types); i++) for(i = 0; i < sizeof(types) / sizeof(*types); i++)
@ -209,9 +208,15 @@ static void _preview_refresh(Preview * preview, GList * selection)
static void _refresh_mime(Preview * preview, Mime * mime, char const * type) static void _refresh_mime(Preview * preview, Mime * mime, char const * type)
{ {
if(mime_get_handler(mime, type, "open") != NULL) if(mime_get_handler(mime, type, "open") != NULL)
{
gtk_widget_show(preview->toolbar);
gtk_widget_show(preview->open); gtk_widget_show(preview->open);
}
if(mime_get_handler(mime, type, "edit") != NULL) if(mime_get_handler(mime, type, "edit") != NULL)
{
gtk_widget_show(preview->toolbar);
gtk_widget_show(preview->edit); gtk_widget_show(preview->edit);
}
} }
static int _refresh_name(Preview * preview, char const * path) static int _refresh_name(Preview * preview, char const * path)
@ -233,6 +238,7 @@ static void _refresh_reset(Preview * preview)
if(preview->source != 0) if(preview->source != 0)
g_source_remove(preview->source); g_source_remove(preview->source);
preview->source = 0; preview->source = 0;
gtk_widget_hide(preview->toolbar);
gtk_widget_hide(preview->open); gtk_widget_hide(preview->open);
gtk_widget_hide(preview->edit); gtk_widget_hide(preview->edit);
gtk_widget_hide(preview->view_image); gtk_widget_hide(preview->view_image);