[Goodies-commits] r3270 - ristretto/trunk/src

Stephan Arts stephan at xfce.org
Sat Sep 29 10:03:27 CEST 2007


Author: stephan
Date: 2007-09-29 08:03:27 +0000 (Sat, 29 Sep 2007)
New Revision: 3270

Modified:
   ristretto/trunk/src/main_window.c
Log:
Fix open-with menu item... should really focus on performance now... :/


Modified: ristretto/trunk/src/main_window.c
===================================================================
--- ristretto/trunk/src/main_window.c	2007-09-28 20:43:06 UTC (rev 3269)
+++ ristretto/trunk/src/main_window.c	2007-09-29 08:03:27 UTC (rev 3270)
@@ -33,6 +33,9 @@
     GtkWidget *picture_viewer;
     GtkWidget *statusbar;
     GtkRecentManager *manager;
+    GtkIconTheme *icon_theme;
+    ThunarVfsMimeDatabase *mime_dbase;
+    GList *menu_apps_list;
     gdouble zoom_factor;
 
     struct {
@@ -143,6 +146,8 @@
 cb_rstto_main_window_play(GtkWidget *widget, RsttoMainWindow *window);
 static void
 cb_rstto_main_window_pause(GtkWidget *widget, RsttoMainWindow *window);
+static void
+cb_rstto_main_window_spawn_app(GtkWidget *widget, ThunarVfsMimeApplication *app);
 
 static void
 cb_rstto_main_window_next(GtkWidget *widget, RsttoMainWindow *window);
@@ -219,6 +224,10 @@
     window->priv = g_new0(RsttoMainWindowPriv, 1);
     window->priv->zoom_factor = 1.2;
 
+    window->priv->mime_dbase = thunar_vfs_mime_database_get_default();
+    window->priv->icon_theme = gtk_icon_theme_get_default();
+    
+
     GtkAccelGroup *accel_group = gtk_accel_group_new();
 
     gtk_window_set_title(GTK_WINDOW(window), PACKAGE_STRING);
@@ -288,6 +297,7 @@
 
     gtk_menu_shell_append(GTK_MENU_SHELL(window->priv->menus.edit.open_with.menu), window->priv->menus.edit.open_with.menu_item_empty);
     gtk_widget_set_sensitive(window->priv->menus.edit.open_with.menu_item_empty, FALSE);
+    gtk_widget_ref(window->priv->menus.edit.open_with.menu_item_empty);
 
     gtk_menu_item_set_submenu(GTK_MENU_ITEM(window->priv->menus.edit.menu_item_open_with), window->priv->menus.edit.open_with.menu);
 
@@ -1064,6 +1074,39 @@
         gtk_window_set_title(GTK_WINDOW(window), title);
         g_free(title);
         title = NULL;
+
+        if(gtk_widget_get_parent(window->priv->menus.edit.open_with.menu_item_empty))
+        {
+            gtk_container_remove(GTK_CONTAINER(window->priv->menus.edit.open_with.menu), window->priv->menus.edit.open_with.menu_item_empty);
+        }
+
+        gtk_container_foreach(GTK_CONTAINER(window->priv->menus.edit.open_with.menu), (GtkCallback)gtk_widget_destroy, NULL);
+        if (info)
+        {
+            window->priv->menu_apps_list = thunar_vfs_mime_database_get_applications(window->priv->mime_dbase, info->mime_info);
+            GList *iter = window->priv->menu_apps_list;
+            if (iter == NULL)
+            {
+                gtk_menu_shell_append(GTK_MENU_SHELL(window->priv->menus.edit.open_with.menu), window->priv->menus.edit.open_with.menu_item_empty);
+                gtk_widget_show(window->priv->menus.edit.open_with.menu_item_empty);
+            }
+            while (iter != NULL)
+            {
+                GtkWidget *menu_item = gtk_image_menu_item_new_with_label(thunar_vfs_mime_application_get_name(iter->data));
+                GtkWidget *image = gtk_image_new_from_icon_name(thunar_vfs_mime_handler_lookup_icon_name(iter->data, window->priv->icon_theme), GTK_ICON_SIZE_MENU);
+                gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menu_item), image);
+                gtk_menu_shell_append(GTK_MENU_SHELL(window->priv->menus.edit.open_with.menu), menu_item);
+                g_object_set_data(iter->data, "entry", entry);
+                g_signal_connect(menu_item, "activate", G_CALLBACK(cb_rstto_main_window_spawn_app), iter->data);
+                gtk_widget_show(menu_item);
+                iter = g_list_next(iter);
+            }
+        }        
+        else
+        {
+            gtk_menu_shell_append(GTK_MENU_SHELL(window->priv->menus.edit.open_with.menu), window->priv->menus.edit.open_with.menu_item_empty);
+            gtk_widget_show(window->priv->menus.edit.open_with.menu_item_empty);
+        }
     }
     else
     {
@@ -1078,6 +1121,13 @@
             gtk_widget_set_sensitive(window->priv->menus.go.menu_item_play, FALSE);
             gtk_widget_set_sensitive(window->priv->menus.go.menu_item_pause, FALSE);
         }
+
+        gtk_container_foreach(GTK_CONTAINER(window->priv->menus.edit.open_with.menu), (GtkCallback)gtk_widget_destroy, NULL);
+        if(!gtk_widget_get_parent(window->priv->menus.edit.open_with.menu_item_empty))
+        {
+            gtk_menu_shell_append(GTK_MENU_SHELL(window->priv->menus.edit.open_with.menu), window->priv->menus.edit.open_with.menu_item_empty);
+            gtk_widget_show(window->priv->menus.edit.open_with.menu_item_empty);
+        }
     }
 
 }
@@ -1132,3 +1182,10 @@
     rstto_picture_viewer_fit_scale(RSTTO_PICTURE_VIEWER(window->priv->picture_viewer));
 }
 
+static void
+cb_rstto_main_window_spawn_app(GtkWidget *widget, ThunarVfsMimeApplication *app)
+{
+    ThunarVfsInfo *info = rstto_navigator_entry_get_info(g_object_get_data(G_OBJECT(app), "entry"));
+    GList *list = g_list_prepend(NULL, info->path);
+    thunar_vfs_mime_handler_exec(THUNAR_VFS_MIME_HANDLER(app), NULL, list, NULL);
+}




More information about the Goodies-commits mailing list