[gnome-panel] menu: add home and desktop directories to places menu
- From: Alberts Muktupāvels <muktupavels src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-panel] menu: add home and desktop directories to places menu
- Date: Sun, 4 Feb 2018 18:34:21 +0000 (UTC)
commit 2f5795d43050f7cb205113093921509d9e14fc24
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date: Sun Feb 4 19:56:40 2018 +0200
menu: add home and desktop directories to places menu
modules/menu/gp-places-menu.c | 131 +++++++++++++++++++++++++++++++----------
1 files changed, 100 insertions(+), 31 deletions(-)
---
diff --git a/modules/menu/gp-places-menu.c b/modules/menu/gp-places-menu.c
index fa763ab..248d67a 100644
--- a/modules/menu/gp-places-menu.c
+++ b/modules/menu/gp-places-menu.c
@@ -55,19 +55,19 @@ static GParamSpec *menu_properties[LAST_PROP] = { NULL };
G_DEFINE_TYPE (GpPlacesMenu, gp_places_menu, GTK_TYPE_MENU)
static void
-bookmark_activate_cb (GtkWidget *item,
- const gchar *uri)
+uri_activate_cb (GtkWidget *item,
+ const gchar *uri)
{
gp_menu_utils_show_uri (uri, NULL, GDK_CURRENT_TIME);
}
static void
-bookmark_drag_data_get_cb (GtkWidget *widget,
- GdkDragContext *context,
- GtkSelectionData *selection_data,
- guint info,
- guint time,
- const gchar *uri)
+uri_drag_data_get_cb (GtkWidget *widget,
+ GdkDragContext *context,
+ GtkSelectionData *selection_data,
+ guint info,
+ guint time,
+ const gchar *uri)
{
gchar *uris[2];
@@ -77,34 +77,36 @@ bookmark_drag_data_get_cb (GtkWidget *widget,
gtk_selection_data_set_uris (selection_data, uris);
}
-static void
-append_bookmark (GpBookmarks *bookmarks,
- GpBookmark *bookmark,
- GpPlacesMenu *menu)
+static GtkWidget *
+create_menu_item (GpPlacesMenu *menu,
+ GFile *file,
+ GIcon *icon,
+ const gchar *icon_name,
+ const gchar *label,
+ const gchar *tooltip)
{
- GtkWidget *add_menu;
+ GtkWidget *image;
guint icon_size;
- GtkWidget *icon;
GtkWidget *item;
- add_menu = menu->bookmarks_menu ? menu->bookmarks_menu : GTK_WIDGET (menu);
+ g_assert (file != NULL);
+ g_assert (icon != NULL || icon_name != NULL);
+ g_assert (label != NULL);
- if (bookmark->icon != NULL)
- icon = gtk_image_new_from_gicon (bookmark->icon, GTK_ICON_SIZE_MENU);
+ if (icon != NULL)
+ image = gtk_image_new_from_gicon (icon, GTK_ICON_SIZE_MENU);
else
- icon = gtk_image_new_from_icon_name ("folder", GTK_ICON_SIZE_MENU);
+ image = gtk_image_new_from_icon_name (icon_name, GTK_ICON_SIZE_MENU);
icon_size = gp_applet_get_menu_icon_size (menu->applet);
- gtk_image_set_pixel_size (GTK_IMAGE (icon), icon_size);
+ gtk_image_set_pixel_size (GTK_IMAGE (image), icon_size);
- item = gp_image_menu_item_new_with_label (bookmark->label);
- gp_image_menu_item_set_image (GP_IMAGE_MENU_ITEM (item), icon);
- gtk_menu_shell_append (GTK_MENU_SHELL (add_menu), item);
- gtk_widget_show (item);
+ item = gp_image_menu_item_new_with_label (label);
+ gp_image_menu_item_set_image (GP_IMAGE_MENU_ITEM (item), image);
- if (bookmark->tooltip != NULL)
+ if (tooltip != NULL)
{
- gtk_widget_set_tooltip_text (item, bookmark->tooltip);
+ gtk_widget_set_tooltip_text (item, tooltip);
g_object_bind_property (menu->applet, "enable-tooltips",
item, "has-tooltip",
@@ -123,21 +125,86 @@ append_bookmark (GpBookmarks *bookmarks,
drag_targets, G_N_ELEMENTS (drag_targets),
GDK_ACTION_COPY);
- if (bookmark->icon != NULL)
- gtk_drag_source_set_icon_gicon (item, bookmark->icon);
+ if (icon != NULL)
+ gtk_drag_source_set_icon_gicon (item, icon);
+ else
+ gtk_drag_source_set_icon_name (item, icon_name);
g_signal_connect_data (item, "drag-data-get",
- G_CALLBACK (bookmark_drag_data_get_cb),
- g_file_get_uri (bookmark->file),
+ G_CALLBACK (uri_drag_data_get_cb),
+ g_file_get_uri (file),
(GClosureNotify) g_free,
0);
}
g_signal_connect_data (item, "activate",
- G_CALLBACK (bookmark_activate_cb),
- g_file_get_uri (bookmark->file),
+ G_CALLBACK (uri_activate_cb),
+ g_file_get_uri (file),
(GClosureNotify) g_free,
0);
+
+ return item;
+}
+
+static void
+append_bookmark (GpBookmarks *bookmarks,
+ GpBookmark *bookmark,
+ GpPlacesMenu *menu)
+{
+ GtkWidget *add_menu;
+ GtkWidget *item;
+
+ add_menu = menu->bookmarks_menu ? menu->bookmarks_menu : GTK_WIDGET (menu);
+
+ item = create_menu_item (menu, bookmark->file, bookmark->icon, "folder",
+ bookmark->label, bookmark->tooltip);
+
+ gtk_menu_shell_append (GTK_MENU_SHELL (add_menu), item);
+ gtk_widget_show (item);
+}
+
+static void
+append_home_dir (GpPlacesMenu *menu)
+{
+ GFile *file;
+ gchar *label;
+ const gchar *tooltip;
+ GtkWidget *item;
+
+ file = g_file_new_for_path (g_get_home_dir ());
+
+ label = gp_menu_utils_get_label_for_file (file);
+ tooltip = _("Open your personal folder");
+
+ item = create_menu_item (menu, file, NULL, "user-home", label, tooltip);
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+ gtk_widget_show (item);
+
+ g_object_unref (file);
+ g_free (label);
+}
+
+static void
+append_desktop_dir (GpPlacesMenu *menu)
+{
+ GFile *file;
+ const gchar *label;
+ const gchar *tooltip;
+ GtkWidget *item;
+
+ file = g_file_new_for_path (g_get_user_special_dir (G_USER_DIRECTORY_DESKTOP));
+
+ /* Translators: Desktop is used here as in "Desktop Folder"
+ * (this is not the Desktop environment).
+ */
+ label = C_("Desktop Folder", "Desktop");
+ tooltip = _("Open the contents of your desktop in a folder");
+
+ item = create_menu_item (menu, file, NULL, "user-desktop", label, tooltip);
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+ gtk_widget_show (item);
+
+ g_object_unref (file);
}
static void
@@ -181,6 +248,8 @@ menu_reload (GpPlacesMenu *menu)
gtk_container_foreach (GTK_CONTAINER (menu), remove_item, NULL);
g_assert (menu->bookmarks_menu == NULL);
+ append_home_dir (menu);
+ append_desktop_dir (menu);
append_bookmarks (menu);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]