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 */
GtkWidget * widget;
GtkWidget * name;
GtkWidget * toolbar;
GtkWidget * open;
GtkWidget * edit;
GtkWidget * view_image;
@ -83,7 +84,6 @@ static Preview * _preview_init(BrowserPluginHelper * helper)
{
Preview * preview;
PangoFontDescription * font;
GtkSizeGroup * group;
GtkWidget * vbox;
GtkWidget * widget;
@ -93,9 +93,23 @@ static Preview * _preview_init(BrowserPluginHelper * helper)
preview->path = NULL;
preview->source = 0;
/* widgets */
group = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
vbox = gtk_vbox_new(FALSE, 4);
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 */
preview->name = gtk_label_new(NULL);
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);
pango_font_description_free(font);
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 */
preview->view_image = gtk_image_new();
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;
Mime * mime = preview->helper->get_mime(preview->helper->browser);
char const image[] = "image/";
char const text[] = "text/";
char const image[6] = "image/";
char const text[5] = "text/";
char const * types[] = { "application/x-perl",
"application/x-shellscript",
"application/xml",
@ -192,9 +191,9 @@ static void _preview_refresh(Preview * preview, GList * selection)
if((type = mime_type(mime, path)) == NULL)
return;
_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);
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);
else
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)
{
if(mime_get_handler(mime, type, "open") != NULL)
{
gtk_widget_show(preview->toolbar);
gtk_widget_show(preview->open);
}
if(mime_get_handler(mime, type, "edit") != NULL)
{
gtk_widget_show(preview->toolbar);
gtk_widget_show(preview->edit);
}
}
static int _refresh_name(Preview * preview, char const * path)
@ -233,6 +238,7 @@ static void _refresh_reset(Preview * preview)
if(preview->source != 0)
g_source_remove(preview->source);
preview->source = 0;
gtk_widget_hide(preview->toolbar);
gtk_widget_hide(preview->open);
gtk_widget_hide(preview->edit);
gtk_widget_hide(preview->view_image);