[gnome-commander] Part IV: Use GtkUIManager instead of GNOMEUIINFO for empty file list popup
- From: Uwe Scholz <uwescholz src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-commander] Part IV: Use GtkUIManager instead of GNOMEUIINFO for empty file list popup
- Date: Wed, 20 May 2020 12:10:30 +0000 (UTC)
commit bd9dfcaef55e8add2dc547ccb6142c5ea5b42fd8
Author: Uwe Scholz <u scholz83 gmx de>
Date: Wed May 20 12:59:59 2020 +0200
Part IV: Use GtkUIManager instead of GNOMEUIINFO for empty file list popup
src/gnome-cmd-list-popmenu.cc | 72 ++++++++++++++++++++++++-------------------
src/imageloader.cc | 6 ++--
src/imageloader.h | 9 ++++--
3 files changed, 50 insertions(+), 37 deletions(-)
---
diff --git a/src/gnome-cmd-list-popmenu.cc b/src/gnome-cmd-list-popmenu.cc
index 1b2c842f..bd16e973 100644
--- a/src/gnome-cmd-list-popmenu.cc
+++ b/src/gnome-cmd-list-popmenu.cc
@@ -27,9 +27,7 @@
#include "gnome-cmd-user-actions.h"
#include "utils.h"
#include "cap.h"
-
-#include "../pixmaps/file-type-icons/file_type_dir.xpm"
-#include "../pixmaps/file-type-icons/file_type_regular.xpm"
+#include "imageloader.h"
using namespace std;
@@ -103,40 +101,50 @@ GtkWidget *gnome_cmd_list_popmenu_new (GnomeCmdFileSelector *fs)
{
g_return_val_if_fail (GNOME_CMD_IS_FILE_SELECTOR (fs), nullptr);
- static GnomeUIInfo new_uiinfo[] =
+ static const GtkActionEntry entries[] =
{
- GNOMEUIINFO_ITEM(N_("_Directory"), nullptr, on_new_directory, file_type_dir_xpm),
- GNOMEUIINFO_ITEM(N_("_Text File"), nullptr, on_new_textfile, file_type_regular_xpm),
- GNOMEUIINFO_END
+ { "New", nullptr, _("_New") },
+ { "Paste", GTK_STOCK_PASTE, _("_Paste"), nullptr, nullptr,
(GCallback) on_paste },
+ { "Terminal", TERMINAL_STOCKID, _("Open _terminal here"), nullptr, nullptr,
(GCallback) command_open_terminal__internal },
+ { "Refresh", GTK_STOCK_REFRESH, _("_Refresh"), nullptr, nullptr,
(GCallback) on_refresh },
+ { "NewDirectory", FILETYPEDIR_STOCKID, _("_Directory"), nullptr, nullptr,
(GCallback) on_new_directory },
+ { "NewTextFile", FILETYPEREGULARFILE_STOCKID, _("_Text File"), nullptr, nullptr,
(GCallback) on_new_textfile }
};
- static GnomeUIInfo popmenu_uiinfo[] =
+ static const char *uiDescription =
+ "<ui>"
+ " <popup action='EmptyFileListPopup'>"
+ " <menu action='New'>"
+ " <menuitem action='NewDirectory'/>"
+ " <menuitem action='NewTextFile'/>"
+ " </menu>"
+ " <menuitem action='Paste'/>"
+ " <separator/>"
+ " <menuitem action='Terminal'/>"
+ " <separator/>"
+ " <menuitem action='Refresh'/>"
+ " </popup>"
+ "</ui>";
+
+ GtkActionGroup *action_group;
+ GtkUIManager *uiManager;
+ GError *error;
+
+ action_group = gtk_action_group_new ("PopupActions");
+ gtk_action_group_add_actions (action_group, entries, G_N_ELEMENTS (entries), fs);
+
+ uiManager = gtk_ui_manager_new ();
+ gtk_ui_manager_insert_action_group (uiManager, action_group, 0);
+
+ error = nullptr;
+ if (!gtk_ui_manager_add_ui_from_string (uiManager, uiDescription, -1, &error))
{
- GNOMEUIINFO_SUBTREE(N_("_New"), new_uiinfo),
- GNOMEUIINFO_ITEM_STOCK(N_("_Paste"), nullptr, on_paste, GTK_STOCK_PASTE),
- GNOMEUIINFO_SEPARATOR,
- GNOMEUIINFO_ITEM_FILENAME (N_("Open _terminal here"), nullptr, command_open_terminal__internal,
PACKAGE_NAME G_DIR_SEPARATOR_S "terminal.svg"),
- GNOMEUIINFO_SEPARATOR,
- GNOMEUIINFO_ITEM_STOCK(N_("_Refresh"), nullptr, on_refresh, GTK_STOCK_REFRESH),
- GNOMEUIINFO_END
- };
-
-
- // Set default callback data
-
- for (int i = 0; new_uiinfo[i].type != GNOME_APP_UI_ENDOFINFO; ++i)
- if (new_uiinfo[i].type == GNOME_APP_UI_ITEM)
- new_uiinfo[i].user_data = fs;
-
- for (int i = 0; popmenu_uiinfo[i].type != GNOME_APP_UI_ENDOFINFO; ++i)
- if (popmenu_uiinfo[i].type == GNOME_APP_UI_ITEM)
- popmenu_uiinfo[i].user_data = fs;
-
- auto menu = static_cast<GnomeCmdListPopmenu*> (g_object_new (GNOME_CMD_TYPE_LIST_POPMENU, nullptr));
-
- // Fill the menu
+ g_message ("building menus failed: %s", error->message);
+ g_error_free (error);
+ exit (EXIT_FAILURE);
+ }
- gnome_app_fill_menu (GTK_MENU_SHELL (menu), popmenu_uiinfo, nullptr, FALSE, 0);
+ GtkWidget *menu = gtk_ui_manager_get_widget (uiManager, "/EmptyFileListPopup");
return GTK_WIDGET (menu);
}
diff --git a/src/imageloader.cc b/src/imageloader.cc
index 18cba5ce..6e5fd113 100644
--- a/src/imageloader.cc
+++ b/src/imageloader.cc
@@ -497,8 +497,10 @@ static struct
} stock_icons[] =
{
{ PIXMAPS_DIR G_DIR_SEPARATOR_S "copy_file_names.xpm", COPYFILENAMES_STOCKID },
- { PIXMAPS_DIR G_DIR_SEPARATOR_S "mail-send.png", MAILSEND_STOCKID },
- { PIXMAPS_DIR G_DIR_SEPARATOR_S "terminal.svg", TERMINAL_STOCKID }
+ { PIXMAPS_DIR G_DIR_SEPARATOR_S "mail-send.png", MAILSEND_STOCKID },
+ { PIXMAPS_DIR G_DIR_SEPARATOR_S "terminal.svg", TERMINAL_STOCKID },
+ { PIXMAPS_DIR G_DIR_SEPARATOR_S FILETYPEICONS_FOLDER G_DIR_SEPARATOR_S "file_type_dir.xpm",
FILETYPEDIR_STOCKID},
+ { PIXMAPS_DIR G_DIR_SEPARATOR_S FILETYPEICONS_FOLDER G_DIR_SEPARATOR_S "file_type_regular.xpm",
FILETYPEREGULARFILE_STOCKID},
};
static gint n_stock_icons = G_N_ELEMENTS (stock_icons);
diff --git a/src/imageloader.h b/src/imageloader.h
index a9c9f6fd..3bb0b3e2 100644
--- a/src/imageloader.h
+++ b/src/imageloader.h
@@ -21,9 +21,12 @@
#pragma once
-#define COPYFILENAMES_STOCKID "gnome-commander-copy-file-names"
-#define MAILSEND_STOCKID "gnome-commander-mail-send"
-#define TERMINAL_STOCKID "gnome-commander-terminal"
+#define FILETYPEICONS_FOLDER "file-type-icons"
+#define COPYFILENAMES_STOCKID "gnome-commander-copy-file-names"
+#define MAILSEND_STOCKID "gnome-commander-mail-send"
+#define TERMINAL_STOCKID "gnome-commander-terminal"
+#define FILETYPEDIR_STOCKID "gnome-commander-file-type-dir"
+#define FILETYPEREGULARFILE_STOCKID "gnome-commander-file-type-regular-file"
#include "gnome-cmd-pixmap.h"
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]