[gnome-commander] Use GtkUIManager instead of deprecated GnomeUIInfo for the internal viewer main menu
- From: Uwe Scholz <uwescholz src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-commander] Use GtkUIManager instead of deprecated GnomeUIInfo for the internal viewer main menu
- Date: Sat, 13 Jun 2020 17:50:12 +0000 (UTC)
commit c6e265102c6bbb100bebe17797db70b2fbea2623
Author: Uwe Scholz <u scholz83 gmx de>
Date: Sat Jun 13 00:06:00 2020 +0200
Use GtkUIManager instead of deprecated GnomeUIInfo for the internal viewer main menu
This work was done in several days of work. Unfortunatelly I had to
change so many things in parallel that it was not possible to create a
smaller commit.
data/org.gnome.gnome-commander.gschema.xml | 7 +
src/gnome-cmd-data.h | 1 +
src/gnome-cmd-file.cc | 2 +-
src/imageloader.cc | 13 +-
src/imageloader.h | 5 +
src/intviewer/viewer-window.cc | 945 +++++++++++------------------
src/intviewer/viewer-window.h | 5 +-
7 files changed, 382 insertions(+), 596 deletions(-)
---
diff --git a/data/org.gnome.gnome-commander.gschema.xml b/data/org.gnome.gnome-commander.gschema.xml
index 314bf510..7dd82557 100644
--- a/data/org.gnome.gnome-commander.gschema.xml
+++ b/data/org.gnome.gnome-commander.gschema.xml
@@ -993,6 +993,13 @@
This option defines how many bytes should be displayed in one line in binary mode.
</description>
</key>
+ <key name="metadata-visible" type="b">
+ <default>true</default>
+ <summary>Metadata view</summary>
+ <description>
+ This option defines if metadata should be visible.
+ </description>
+ </key>
<key name="offset-x" type="i">
<default>20</default>
<summary>Horizontal offset</summary>
diff --git a/src/gnome-cmd-data.h b/src/gnome-cmd-data.h
index 7fd751a7..09a572e9 100644
--- a/src/gnome-cmd-data.h
+++ b/src/gnome-cmd-data.h
@@ -218,6 +218,7 @@ GcmdSettings *gcmd_settings_new (void);
#define GCMD_SETTINGS_IV_FONT_SIZE "font-size"
#define GCMD_SETTINGS_IV_TAB_SIZE "tab-size"
#define GCMD_SETTINGS_IV_BINARY_BYTES_PER_LINE "binary-bytes-per-line"
+#define GCMD_SETTINGS_IV_METADATA_VISIBLE "metadata-visible"
#define GCMD_SETTINGS_IV_X_OFFSET "offset-y"
#define GCMD_SETTINGS_IV_Y_OFFSET "offset-y"
#define GCMD_SETTINGS_IV_WINDOW_WIDTH "window-width"
diff --git a/src/gnome-cmd-file.cc b/src/gnome-cmd-file.cc
index 02c63eb7..3b72e97f 100644
--- a/src/gnome-cmd-file.cc
+++ b/src/gnome-cmd-file.cc
@@ -1,4 +1,4 @@
-/**
+/**
* @file gnome-cmd-file.cc
* @copyright (C) 2001-2006 Marcus Bjurman\n
* @copyright (C) 2007-2012 Piotr Eljasiak\n
diff --git a/src/imageloader.cc b/src/imageloader.cc
index ad7d00a8..39cf9f72 100644
--- a/src/imageloader.cc
+++ b/src/imageloader.cc
@@ -496,10 +496,15 @@ static struct
const gchar *stock_id;
} stock_icons[] =
{
- { PIXMAPS_DIR G_DIR_SEPARATOR_S "copy_file_names.xpm", COPYFILENAMES_STOCKID },
- { PIXMAPS_DIR G_DIR_SEPARATOR_S "exec_wheel.xpm", EXEC_WHEEL_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 "copy_file_names.xpm", COPYFILENAMES_STOCKID },
+ { PIXMAPS_DIR G_DIR_SEPARATOR_S "exec_wheel.xpm", EXEC_WHEEL_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 "rotate-90-16.xpm", ROTATE_90_STOCKID },
+ { PIXMAPS_DIR G_DIR_SEPARATOR_S "rotate-270-16.xpm", ROTATE_270_STOCKID },
+ { PIXMAPS_DIR G_DIR_SEPARATOR_S "rotate-180-16.xpm", ROTATE_180_STOCKID },
+ { PIXMAPS_DIR G_DIR_SEPARATOR_S "flip-vertical-16.xpm", FLIP_VERTICAL_STOCKID },
+ { PIXMAPS_DIR G_DIR_SEPARATOR_S "flip-horizontal-16.xpm", FLIP_HORIZONTAL_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},
};
diff --git a/src/imageloader.h b/src/imageloader.h
index e22a82c3..83a25528 100644
--- a/src/imageloader.h
+++ b/src/imageloader.h
@@ -29,6 +29,11 @@
#define FILETYPEREGULARFILE_STOCKID "gnome-commander-file-type-regular-file"
#define MAILSEND_STOCKID "gnome-commander-mail-send"
#define TERMINAL_STOCKID "gnome-commander-terminal"
+#define ROTATE_90_STOCKID "gnome-commander-rotate-90"
+#define ROTATE_270_STOCKID "gnome-commander-rotate-270"
+#define ROTATE_180_STOCKID "gnome-commander-rotate-180"
+#define FLIP_VERTICAL_STOCKID "gnome-commander-flip-vertical"
+#define FLIP_HORIZONTAL_STOCKID "gnome-commander-flip-horizontal"
#include "gnome-cmd-pixmap.h"
diff --git a/src/intviewer/viewer-window.cc b/src/intviewer/viewer-window.cc
index 534a2adc..0f0efb29 100644
--- a/src/intviewer/viewer-window.cc
+++ b/src/intviewer/viewer-window.cc
@@ -26,6 +26,7 @@
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
+#include <vector>
#include <gtk/gtk.h>
#include <gtk/gtktable.h>
@@ -39,6 +40,7 @@
#include "utils.h"
#include "tags/gnome-cmd-tags.h"
#include "gnome-cmd-data.h"
+#include "imageloader.h"
using namespace std;
@@ -52,8 +54,6 @@ using namespace std;
#define GCMD_INTERNAL_VIEWER "org.gnome.gnome-commander.preferences.internal-viewer"
#define GCMD_GSETTINGS_IV_CHARSET "charset"
-#define NUMBER_OF_CHARSETS 22
-
/***********************************
* Functions for using GSettings
***********************************/
@@ -115,12 +115,13 @@ struct GViewerWindowPrivate
GtkWidget *statusbar;
GtkAccelGroup *accel_group;
- GtkWidget *encoding_menu_item[NUMBER_OF_CHARSETS];
+ std::vector<GtkWidget *> encodingMenuItems;
+ std::vector<const char*> encodingCharsets;
GtkWidget *wrap_mode_menu_item;
GtkWidget *hex_offset_menu_item;
GtkWidget *show_exif_menu_item;
GtkWidget *fixed_limit_menu_items[3];
- GViewerWindowSettings state;
+ GViewerWindowSettings *gViewerWindowSettings;
GtkWidget *metadata_view;
gboolean metadata_visible;
@@ -150,19 +151,21 @@ static GtkWidget *gviewer_window_create_menus(GViewerWindow *obj);
inline void gviewer_window_show_metadata(GViewerWindow *obj);
inline void gviewer_window_hide_metadata(GViewerWindow *obj);
+gboolean gviewerwindow_get_metadata_visble(GViewerWindow *gViewerWindow);
+
// Event Handlers
static void menu_file_close (GtkMenuItem *item, GViewerWindow *obj);
-static void menu_view_exif_information(GtkMenuItem *item, GViewerWindow *obj);
+static void menu_toggle_view_exif_information(GtkToggleAction *item, GViewerWindow *gViewerWindow);
static void menu_edit_copy(GtkMenuItem *item, GViewerWindow *obj);
static void menu_edit_find(GtkMenuItem *item, GViewerWindow *obj);
static void menu_edit_find_next(GtkMenuItem *item, GViewerWindow *obj);
static void menu_edit_find_prev(GtkMenuItem *item, GViewerWindow *obj);
-static void menu_view_wrap(GtkMenuItem *item, GViewerWindow *obj);
-static void menu_view_display_mode(GtkMenuItem *item, GViewerWindow *obj);
-static void menu_view_set_charset(GtkMenuItem *item, GViewerWindow *obj);
+static void menu_view_wrap(GtkToggleAction *item, GViewerWindow *obj);
+static void menu_view_set_display_mode(GtkAction *notUsed, GtkRadioAction *radioAction, GViewerWindow
*gViewerWindow);
+static void menu_view_set_charset(GtkAction *notUsed, GtkRadioAction *radioAction, GViewerWindow
*gViewerWindow);
static void menu_view_zoom_in(GtkMenuItem *item, GViewerWindow *obj);
static void menu_view_zoom_out(GtkMenuItem *item, GViewerWindow *obj);
static void menu_view_zoom_normal(GtkMenuItem *item, GViewerWindow *obj);
@@ -170,8 +173,8 @@ static void menu_view_zoom_best_fit(GtkMenuItem *item, GViewerWindow *obj);
static void menu_image_operation(GtkMenuItem *item, GViewerWindow *obj);
-static void menu_settings_binary_bytes_per_line(GtkMenuItem *item, GViewerWindow *obj);
-static void menu_settings_hex_decimal_offset(GtkMenuItem *item, GViewerWindow *obj);
+static void menu_settings_binary_bytes_per_line(GtkAction *notUsed, GtkRadioAction *radioAction,
GViewerWindow *gViewerWindow);
+static void menu_settings_hex_decimal_offset(GtkToggleAction *item, GViewerWindow *gViewerWindow);
static void menu_settings_save_settings(GtkMenuItem *item, GViewerWindow *obj);
static void menu_help_quick_help(GtkMenuItem *item, GViewerWindow *obj);
@@ -188,20 +191,18 @@ GtkWidget *create_view ();
GtkWidget *gviewer_window_file_view (GnomeCmdFile *f, GViewerWindowSettings *gViewerWindowSettings)
{
- GViewerWindowSettings gViewerWindowSettings;
-
if (!gViewerWindowSettings)
{
- gviewer_window_load_settings(&gViewerWindowSettings);
- gViewerWindowSettings = &gViewerWindowSettings;
+ gViewerWindowSettings = gviewer_window_get_settings();
}
GtkWidget *w = gviewer_window_new ();
gviewer_window_load_file (GVIEWER_WINDOW (w), f);
- if (gViewerWindowSettings)
- gviewer_window_set_settings(GVIEWER_WINDOW (w), gViewerWindowSettings);
+ gviewer_window_load_settings(GVIEWER_WINDOW (w), gViewerWindowSettings);
+
+ GVIEWER_WINDOW(w)->priv->gViewerWindowSettings = gViewerWindowSettings;
return w;
}
@@ -270,8 +271,6 @@ static void gviewer_window_init (GViewerWindow *w)
// w->priv->status_bar_msg = FALSE;
// w->priv->filename = nullptr;
- // w->priv->metadata_view = nullptr;
- // w->priv->metadata_visible = FALSE;
w->priv->current_scale_index = 5;
GtkWindow *win = GTK_WINDOW (w);
@@ -302,8 +301,17 @@ static void gviewer_window_init (GViewerWindow *w)
gtk_widget_grab_focus (GTK_WIDGET (w->priv->viewer));
gtk_container_add (GTK_CONTAINER (w), w->priv->vbox);
-}
+ // This list must be in the same order as the elements in w->priv->encodingMenuItems
+ w->priv->encodingCharsets = { UTF8, ASCII, CP437,
+ ISO88596, ARABIC, CP864,
+ ISO88594, ISO88592, CP1250,
+ ISO88595, CP1251, ISO88597,
+ CP1253, HEBREW, CP862,
+ ISO88598, ISO885915, ISO88593,
+ ISO88599, CP1254, CP1252,
+ ISO88591 };
+}
static void gviewer_window_status_line_changed(GViewer *obj, const gchar *status_line, GViewerWindow *wnd)
{
@@ -321,7 +329,7 @@ static void gviewer_window_status_line_changed(GViewer *obj, const gchar *status
}
-void gviewer_window_set_settings(GViewerWindow *gViewerWindow, /*in*/ GViewerWindowSettings *settings)
+void gviewer_window_load_settings(GViewerWindow *gViewerWindow, GViewerWindowSettings *settings)
{
g_return_if_fail (IS_GVIEWER_WINDOW (gViewerWindow));
g_return_if_fail (settings != nullptr);
@@ -347,104 +355,29 @@ void gviewer_window_set_settings(GViewerWindow *gViewerWindow, /*in*/ GViewerWin
}
gviewer_set_wrap_mode(gViewerWindow->priv->viewer, settings->wrap_mode);
- gtk_check_menu_item_set_active(
- GTK_CHECK_MENU_ITEM (gViewerWindow->priv->wrap_mode_menu_item),
- settings->wrap_mode);
+ gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM
(gViewerWindow->priv->wrap_mode_menu_item),settings->wrap_mode);
gviewer_set_hex_offset_display(gViewerWindow->priv->viewer, settings->hex_decimal_offset);
- gtk_check_menu_item_set_active(
- GTK_CHECK_MENU_ITEM (gViewerWindow->priv->hex_offset_menu_item),
- settings->hex_decimal_offset);
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM (gViewerWindow->priv->hex_offset_menu_item),
settings->hex_decimal_offset);
- gviewer_set_encoding(gViewerWindow->priv->viewer, settings->charset);
- if (strcmp(settings->charset, (gchar*) UTF8) == 0)
- {
- gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (gViewerWindow->priv->encoding_menu_item[0]),
TRUE);
- }
- else if (strcmp(settings->charset, (gchar*) ASCII) == 0)
- {
- gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (gViewerWindow->priv->encoding_menu_item[1]),
TRUE);
- }
- else if (strcmp(settings->charset, (gchar*) CP437) == 0)
- {
- gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (gViewerWindow->priv->encoding_menu_item[2]),
TRUE);
- }
- else if (strcmp(settings->charset, (gchar*) ISO88596) == 0)
- {
- gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (gViewerWindow->priv->encoding_menu_item[3]),
TRUE);
- }
- else if (strcmp(settings->charset, (gchar*) ARABIC) == 0)
- {
- gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (gViewerWindow->priv->encoding_menu_item[4]),
TRUE);
- }
- else if (strcmp(settings->charset, (gchar*) CP864) == 0)
- {
- gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (gViewerWindow->priv->encoding_menu_item[5]),
TRUE);
- }
- else if (strcmp(settings->charset, (gchar*) ISO88594) == 0)
- {
- gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (gViewerWindow->priv->encoding_menu_item[6]),
TRUE);
- }
- else if (strcmp(settings->charset, (gchar*) ISO88592) == 0)
- {
- gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (gViewerWindow->priv->encoding_menu_item[7]),
TRUE);
- }
- else if (strcmp(settings->charset, (gchar*) CP1250) == 0)
+ if (settings->metadata_visible)
{
- gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (gViewerWindow->priv->encoding_menu_item[8]),
TRUE);
+ gviewer_window_show_metadata(gViewerWindow);
}
- else if (strcmp(settings->charset, (gchar*) ISO88595) == 0)
- {
- gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (gViewerWindow->priv->encoding_menu_item[9]),
TRUE);
- }
- else if (strcmp(settings->charset, (gchar*) CP1251) == 0)
- {
- gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (gViewerWindow->priv->encoding_menu_item[10]),
TRUE);
- }
- else if (strcmp(settings->charset, (gchar*) ISO88597) == 0)
- {
- gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (gViewerWindow->priv->encoding_menu_item[11]),
TRUE);
- }
- else if (strcmp(settings->charset, (gchar*) CP1253) == 0)
- {
- gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (gViewerWindow->priv->encoding_menu_item[12]),
TRUE);
- }
- else if (strcmp(settings->charset, (gchar*) HEBREW) == 0)
- {
- gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (gViewerWindow->priv->encoding_menu_item[13]),
TRUE);
- }
- else if (strcmp(settings->charset, (gchar*) CP862) == 0)
- {
- gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (gViewerWindow->priv->encoding_menu_item[14]),
TRUE);
- }
- else if (strcmp(settings->charset, (gchar*) ISO88598) == 0)
- {
- gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (gViewerWindow->priv->encoding_menu_item[15]),
TRUE);
- }
- else if (strcmp(settings->charset, (gchar*) ISO885915) == 0)
- {
- gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (gViewerWindow->priv->encoding_menu_item[16]),
TRUE);
- }
- else if (strcmp(settings->charset, (gchar*) ISO88593) == 0)
- {
- gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (gViewerWindow->priv->encoding_menu_item[17]),
TRUE);
- }
- else if (strcmp(settings->charset, (gchar*) ISO88599) == 0)
- {
- gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (gViewerWindow->priv->encoding_menu_item[18]),
TRUE);
- }
- else if (strcmp(settings->charset, (gchar*) CP1254) == 0)
- {
- gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (gViewerWindow->priv->encoding_menu_item[19]),
TRUE);
- }
- else if (strcmp(settings->charset, (gchar*) CP1252) == 0)
- {
- gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (gViewerWindow->priv->encoding_menu_item[20]),
TRUE);
- }
- else if (strcmp(settings->charset, (gchar*) ISO88591) == 0)
+ gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (gViewerWindow->priv->show_exif_menu_item),
settings->metadata_visible);
+
+ gviewer_set_encoding(gViewerWindow->priv->viewer, settings->charset);
+
+ // activate the radio menu item for the selected charset in the settings
+ auto availableCharsets = gViewerWindow->priv->encodingCharsets;
+ auto index = 0;
+ for(auto ii = availableCharsets.begin(); ii != availableCharsets.end(); ii++)
{
- gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (gViewerWindow->priv->encoding_menu_item[21]),
TRUE);
+ if (!g_strcmp0(availableCharsets.at(index), settings->charset))
+ break;
+ index++;
}
+ gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (gViewerWindow->priv->encodingMenuItems[index]),
TRUE);
gtk_window_resize(GTK_WINDOW (gViewerWindow),
settings->rect.width, settings->rect.height);
@@ -485,6 +418,14 @@ void gviewer_window_get_current_settings(GViewerWindow *obj, /* out */ GViewerWi
strncpy(settings->charset, gviewer_get_encoding(obj->priv->viewer), sizeof(settings->charset) - 1);
settings->hex_decimal_offset = gviewer_get_hex_offset_display(obj->priv->viewer);
settings->tab_size = gviewer_get_tab_size(obj->priv->viewer);
+ settings->metadata_visible = gviewerwindow_get_metadata_visble(obj);
+}
+
+gboolean gviewerwindow_get_metadata_visble(GViewerWindow *gViewerWindow)
+{
+ g_return_val_if_fail (IS_GVIEWER_WINDOW (gViewerWindow), FALSE);
+
+ return (gViewerWindow->priv->metadata_visible);
}
@@ -500,6 +441,7 @@ static void gviewer_window_destroy (GtkObject *widget)
g_free (w->priv->filename);
w->priv->filename = nullptr;
+ delete(w->priv->gViewerWindowSettings);
g_free (w->priv);
w->priv = nullptr;
@@ -596,445 +538,274 @@ static gboolean gviewer_window_key_pressed(GtkWidget *widget, GdkEventKey *event
}
-static GtkWidget *create_menu_seperator(GtkWidget *container)
+static GtkWidget *gviewer_window_create_menus(GViewerWindow *gViewerWindow)
{
- GtkWidget *separatormenuitem1 = gtk_separator_menu_item_new ();
-
- gtk_widget_show (separatormenuitem1);
- gtk_container_add (GTK_CONTAINER (container), separatormenuitem1);
- gtk_widget_set_sensitive (separatormenuitem1, FALSE);
-
- return separatormenuitem1;
-}
-
-
-enum MENUITEMTYPE
-{
- MI_NONE,
- MI_NORMAL,
- MI_CHECK,
- MI_RADIO,
- MI_SEPERATOR,
- MI_SUBMENU
-} ;
-
-
-struct MENU_ITEM_DATA
-{
- MENUITEMTYPE menutype;
- const gchar *label;
-
- guint keyval;
- guint modifier;
-
- GCallback callback;
-
- GnomeUIPixmapType pixmap_type;
- gconstpointer pixmap_info;
-
- const gchar *gobj_key;
- gpointer *gobj_val;
-
- GtkWidget **menu_item_widget;
-
- GSList **radio_list;
-};
-
-static GtkWidget *create_menu_item (MENUITEMTYPE type,
- const gchar *name,
- GtkWidget *container,
- GtkAccelGroup *accel,
- guint keyval,
- guint modifier,
- GCallback callback,
- GnomeUIPixmapType pixmap_type,
- gconstpointer pixmap_info,
- gpointer userdata)
-{
- GtkWidget *menuitem;
-
-#if defined (__GNUC__)
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wswitch-enum"
-#endif
- switch (type)
+ static const char *uiMenuBarDescription =
+ "<ui>"
+ " <menubar name='InternalViewerMenuBar'>"
+ " <menu action='FileMenu'>"
+ " <menuitem action='Close'/>"
+ " </menu>"
+ " <menu action='ViewMenu'>"
+ " <menuitem action='Text'/>"
+ " <menuitem action='Binary'/>"
+ " <menuitem action='Hexadecimal'/>"
+ " <menuitem action='Image'/>"
+ " <separator/>"
+ " <menuitem action='ZoomIn'/>"
+ " <menuitem action='ZoomOut'/>"
+ " <menuitem action='NormalSize'/>"
+ " <menuitem action='BestFit'/>"
+ " </menu>"
+ " <menu action='TextMenu'>"
+ " <menuitem action='CopyTextSelection'/>"
+ " <menuitem action='Find'/>"
+ " <menuitem action='FindNext'/>"
+ " <menuitem action='FindPrevious'/>"
+ " <separator/>"
+ " <menuitem action='WrapLines'/>"
+ " <separator/>"
+ " <menu action='Encoding'>"
+ " <menuitem action='UTF8'/>"
+ " <menuitem action='EnglishUsAscii'/>"
+ " <menuitem action='TerminalCP437'/>"
+ " <menuitem action='ArabicISO88596'/>"
+ " <menuitem action='ArabicWindows'/>"
+ " <menuitem action='ArabicDosCP864'/>"
+ " <menuitem action='BalticISO88594'/>"
+ " <menuitem action='CentrEuISO88592'/>"
+ " <menuitem action='CentrEuCP1250'/>"
+ " <menuitem action='CyrISO88595'/>"
+ " <menuitem action='CyrCP1251'/>"
+ " <menuitem action='GreekISO88597'/>"
+ " <menuitem action='GreekCP1253'/>"
+ " <menuitem action='HebrewWin'/>"
+ " <menuitem action='HebrewDos'/>"
+ " <menuitem action='HebrewISO88598'/>"
+ " <menuitem action='Latin9'/>"
+ " <menuitem action='MalteseISO88593'/>"
+ " <menuitem action='TurkishISO88599'/>"
+ " <menuitem action='TurkishCP1254'/>"
+ " <menuitem action='WesternCP1252'/>"
+ " <menuitem action='WesternISO88591'/>"
+ " </menu>"
+ " </menu>"
+ " <menu action='ImageMenu'>"
+ " <menuitem action='ShowMetadataTags'/>"
+ " <separator/>"
+ " <menuitem action='RotateClockwise'/>"
+ " <menuitem action='RotateCounterClockwise'/>"
+ " <menuitem action='Rotate180'/>"
+ " <menuitem action='FlipVertical'/>"
+ " <menuitem action='FlipHorizontal'/>"
+ " </menu>"
+ " <menu action='SettingsMenu'>"
+ " <menu action='BinaryMode'>"
+ " <menuitem action='20CharsPerLine'/>"
+ " <menuitem action='40CharsPerLine'/>"
+ " <menuitem action='80CharsPerLine'/>"
+ " </menu>"
+ " <menuitem action='HexadecimalOffset'/>"
+ " <separator/>"
+ " <menuitem action='SaveCurrentSettings'/>"
+ " </menu>"
+ " <menu action='HelpMenu'>"
+ " <menuitem action='QuickHelp'/>"
+ " <menuitem action='KeyboardShortcuts'/>"
+ " </menu>"
+ " </menubar>"
+ "</ui>";
+
+
+ static const GtkActionEntry fileMenuEntries[] =
{
- case MI_CHECK:
- menuitem = gtk_check_menu_item_new_with_mnemonic (_(name));
- break;
-
- case MI_NORMAL:
- default:
- menuitem = gtk_image_menu_item_new_with_mnemonic (_(name));
- break;
- }
-#if defined (__GNUC__)
-#pragma GCC diagnostic pop
-#endif
+ { "FileMenu", nullptr, _("_File") },
+ { "Close", GTK_STOCK_CLOSE, _("_Close"), "Escape", nullptr, (GCallback) menu_file_close }
+ };
- if (pixmap_type != GNOME_APP_PIXMAP_NONE && pixmap_info != nullptr)
+ static const GtkRadioActionEntry viewMenuRadioEntries[] =
{
- GtkWidget *pixmap = create_ui_pixmap (nullptr, pixmap_type, pixmap_info, GTK_ICON_SIZE_MENU);
- if (pixmap)
- {
- gtk_widget_show (pixmap);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem), pixmap);
- }
-
- }
-
- gtk_widget_show (menuitem);
- gtk_container_add (GTK_CONTAINER (container), menuitem);
-
- if (accel && keyval)
- gtk_widget_add_accelerator (menuitem, "activate", accel, keyval, (GdkModifierType) modifier,
GTK_ACCEL_VISIBLE);
-
- g_signal_connect (menuitem, "activate", callback, userdata);
-
- return menuitem;
-}
-
-static GtkWidget *create_radio_menu_item (GSList **group,
- const gchar *name,
- GtkWidget *container,
- GtkAccelGroup *accel,
- guint keyval,
- guint modifier,
- GCallback callback,
- gpointer userdata)
-{
- GtkWidget *menuitem = gtk_radio_menu_item_new_with_mnemonic (*group, _(name));
-
- *group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (menuitem));
-
- if (accel && keyval)
- gtk_widget_add_accelerator (menuitem, "activate", accel, keyval, (GdkModifierType) modifier,
GTK_ACCEL_VISIBLE);
-
- g_signal_connect (menuitem, "activate", callback, userdata);
-
- gtk_widget_show (menuitem);
- gtk_container_add (GTK_CONTAINER (container), menuitem);
-
- return menuitem;
-}
-
-inline GtkWidget *create_sub_menu(const gchar *name, GtkWidget *container)
-{
- GtkWidget *menuitem4 = gtk_menu_item_new_with_mnemonic (_(name));
- gtk_widget_show (menuitem4);
- gtk_container_add (GTK_CONTAINER (container), menuitem4);
-
- GtkWidget *menu4 = gtk_menu_new ();
- gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem4), menu4);
-
- return menu4;
-}
-
-static void create_menu_items (GtkWidget *container, GtkAccelGroup *accel, gpointer user_data,
MENU_ITEM_DATA *menudata)
-{
- g_return_if_fail (menudata != nullptr);
- g_return_if_fail (container != nullptr);
+ { "Text", nullptr, _("_Text"), "1", nullptr, DISP_MODE_TEXT_FIXED},
+ { "Binary", nullptr, _("_Binary"), "2", nullptr, DISP_MODE_BINARY},
+ { "Hexadecimal", nullptr, _("_Hexadecimal"), "3", nullptr, DISP_MODE_HEXDUMP},
+ { "Image", nullptr, _("_Image"), "4", nullptr, DISP_MODE_IMAGE},
+ };
- while (menudata && menudata->menutype!=MI_NONE)
+ static const GtkActionEntry viewMenuEntries[] =
{
- GtkWidget *item = nullptr;
-
- switch (menudata->menutype)
- {
- case MI_NONE:
- break;
-
- case MI_SUBMENU:
- item = create_sub_menu(menudata->label, container);
- break;
-
- case MI_SEPERATOR:
- item = create_menu_seperator(container);
- break;
-
- case MI_NORMAL:
- case MI_CHECK:
- item = create_menu_item(menudata->menutype,
- menudata->label, container,
- menudata->keyval ? accel : nullptr,
- menudata->keyval,
- menudata->modifier,
- menudata->callback,
- menudata->pixmap_type, menudata->pixmap_info, user_data);
- break;
-
- case MI_RADIO:
- if (!menudata->radio_list)
- g_warning ("radio_list field is nullptr in \"%s\" menu item", menudata->label);
- else
- {
- item = create_radio_menu_item(menudata->radio_list,
- menudata->label, container,
- menudata->keyval ? accel : nullptr,
- menudata->keyval,
- menudata->modifier,
- menudata->callback, user_data);
- }
- break;
-
- default:
- break;
- }
-
- if (menudata->gobj_key)
- g_object_set_data (G_OBJECT (item), menudata->gobj_key, menudata->gobj_val);
-
- if (menudata->menu_item_widget)
- *menudata->menu_item_widget = item;
-
- menudata++;
- }
-}
-
-#define NO_KEYVAL 0
-#define NO_MODIFIER 0
-#define NO_GOBJ_KEY nullptr
-#define NO_GOBJ_VAL nullptr
-#define NO_MENU_ITEM nullptr
-#define NO_GSLIST nullptr
-#define NO_PIXMAP_INFO 0
+ { "ViewMenu", nullptr, _("_View") },
+ { "ZoomIn", GTK_STOCK_ZOOM_IN, _("_Zoom In"), "<Control>plus", nullptr, (GCallback)
menu_view_zoom_in },
+ { "ZoomOut", GTK_STOCK_ZOOM_OUT, _("_Zoom Out"), "<Control>minus", nullptr, (GCallback)
menu_view_zoom_out },
+ { "NormalSize", GTK_STOCK_ZOOM_100, _("_Normal Size"), "<Control>0", nullptr, (GCallback)
menu_view_zoom_normal },
+ { "BestFit", GTK_STOCK_ZOOM_FIT, _("_Best Fit"), "<Control>period", nullptr, (GCallback)
menu_view_zoom_best_fit }
+ };
- static GtkWidget *gviewer_window_create_menus(GViewerWindow *gViewerWindow)
-{
- GtkWidget *int_viewer_menu;
- GtkWidget *submenu;
-
- MENU_ITEM_DATA file_menu_items[] = {
- {MI_NORMAL, _("_Close"), GDK_Escape, NO_MODIFIER, G_CALLBACK (menu_file_close),
- GNOME_APP_PIXMAP_STOCK, GTK_STOCK_CLOSE,
- NO_GOBJ_KEY, NO_GOBJ_VAL,
- NO_MENU_ITEM, NO_GSLIST},
- {MI_NONE}
+ static const GtkActionEntry textMenuEntries[] =
+ {
+ { "TextMenu", nullptr, _("_Text") },
+ { "CopyTextSelection", GTK_STOCK_COPY, _("_Copy Text Selection"), "<Control>C", nullptr, (GCallback)
menu_edit_copy },
+ { "Find", GTK_STOCK_FIND, _("Find…"), "<Control>F", nullptr, (GCallback)
menu_edit_find },
+ { "FindNext", nullptr, _("Find Next"), "F3", nullptr, (GCallback)
menu_edit_find_next },
+ { "FindPrevious", nullptr, _("Find Previous"), "<Shift>F3", nullptr, (GCallback)
menu_edit_find_prev },
+ { "Encoding", nullptr, _("_Encoding") }
};
- GSList *view_mode_list = nullptr;
-
- MENU_ITEM_DATA view_menu_items[] = {
- {MI_RADIO, _("_Text"), GDK_1, NO_MODIFIER, G_CALLBACK (menu_view_display_mode),
- GNOME_APP_PIXMAP_NONE, NO_PIXMAP_INFO,
- G_OBJ_DISPMODE_KEY, (gpointer *) GUINT_TO_POINTER (DISP_MODE_TEXT_FIXED),
- NO_MENU_ITEM, &view_mode_list},
- {MI_RADIO, _("_Binary"), GDK_2, NO_MODIFIER, G_CALLBACK (menu_view_display_mode),
- GNOME_APP_PIXMAP_NONE, NO_PIXMAP_INFO,
- G_OBJ_DISPMODE_KEY, (gpointer *) GUINT_TO_POINTER (DISP_MODE_BINARY),
- NO_MENU_ITEM, &view_mode_list},
- {MI_RADIO, _("_Hexadecimal"), GDK_3, NO_MODIFIER, G_CALLBACK (menu_view_display_mode),
- GNOME_APP_PIXMAP_NONE, NO_PIXMAP_INFO,
- G_OBJ_DISPMODE_KEY, (gpointer *) GUINT_TO_POINTER (DISP_MODE_HEXDUMP),
- NO_MENU_ITEM, &view_mode_list},
- {MI_RADIO, _("_Image"), GDK_4, NO_MODIFIER, G_CALLBACK (menu_view_display_mode),
- GNOME_APP_PIXMAP_NONE, NO_PIXMAP_INFO,
- G_OBJ_DISPMODE_KEY, (gpointer *) GUINT_TO_POINTER (DISP_MODE_IMAGE),
- NO_MENU_ITEM, &view_mode_list},
- {MI_SEPERATOR},
- {MI_NORMAL, _("_Zoom In"), GDK_plus, GDK_CONTROL_MASK, G_CALLBACK (menu_view_zoom_in),
- GNOME_APP_PIXMAP_STOCK, GTK_STOCK_ZOOM_IN,
- NO_GOBJ_KEY, NO_GOBJ_VAL,
- NO_MENU_ITEM, NO_GSLIST},
- {MI_NORMAL, _("Zoom _Out"), GDK_minus, GDK_CONTROL_MASK, G_CALLBACK (menu_view_zoom_out),
- GNOME_APP_PIXMAP_STOCK, GTK_STOCK_ZOOM_OUT,
- NO_GOBJ_KEY, NO_GOBJ_VAL,
- NO_MENU_ITEM, NO_GSLIST},
- {MI_NORMAL, _("_Normal Size"), GDK_0, GDK_CONTROL_MASK, G_CALLBACK (menu_view_zoom_normal),
- GNOME_APP_PIXMAP_STOCK, GTK_STOCK_ZOOM_100,
- NO_GOBJ_KEY, NO_GOBJ_VAL,
- NO_MENU_ITEM, NO_GSLIST},
- {MI_NORMAL, _("Best _Fit"), NO_KEYVAL, NO_MODIFIER, G_CALLBACK (menu_view_zoom_best_fit),
- GNOME_APP_PIXMAP_STOCK, GTK_STOCK_ZOOM_FIT,
- NO_GOBJ_KEY, NO_GOBJ_VAL,
- NO_MENU_ITEM, NO_GSLIST},
- {MI_NONE}
+ static const GtkToggleActionEntry textMenuToggleEntries[] =
+ {
+ { "WrapLines", nullptr, _("_Wrap lines"), "<Control>W", nullptr, (GCallback)
menu_view_wrap, true}
};
+ static const GtkRadioActionEntry encodingMenuRadioEntries[] =
+ {
+ { "UTF8", nullptr, _("_UTF-8"), "U", nullptr, 0},
+ { "EnglishUsAscii", nullptr, _("English (US-_ASCII)"), "A", nullptr, 1},
+ { "TerminalCP437", nullptr, _("Terminal (CP437)"), "Q", nullptr, 2},
+ { "ArabicISO88596", nullptr, _("Arabic (ISO-8859-6)"), nullptr, nullptr, 3},
+ { "ArabicWindows", nullptr, _("Arabic (Windows, CP1256)"), nullptr, nullptr, 4},
+ { "ArabicDosCP864", nullptr, _("Arabic (Dos, CP864)"), nullptr, nullptr, 5},
+ { "BalticISO88594", nullptr, _("Baltic (ISO-8859-4)"), nullptr, nullptr, 6},
+ { "CentrEuISO88592", nullptr, _("Central European (ISO-8859-2)"), nullptr, nullptr, 7},
+ { "CentrEuCP1250", nullptr, _("Central European (CP1250)"), nullptr, nullptr, 8},
+ { "CyrISO88595", nullptr, _("Cyrillic (ISO-8859-5)"), nullptr, nullptr, 9},
+ { "CyrCP1251", nullptr, _("Cyrillic (CP1251)"), nullptr, nullptr, 10},
+ { "GreekISO88597", nullptr, _("Greek (ISO-8859-7)"), nullptr, nullptr, 11},
+ { "GreekCP1253", nullptr, _("Greek (CP1253)"), nullptr, nullptr, 12},
+ { "HebrewWin", nullptr, _("Hebrew (Windows, CP1255)"), nullptr, nullptr, 13},
+ { "HebrewDos", nullptr, _("Hebrew (Dos, CP862)"), nullptr, nullptr, 14},
+ { "HebrewISO88598", nullptr, _("Hebrew (ISO-8859-8)"), nullptr, nullptr, 15},
+ { "Latin9", nullptr, _("Latin 9 (ISO-8859-15)"), nullptr, nullptr, 16},
+ { "MalteseISO88593", nullptr, _("Maltese (ISO-8859-3)"), nullptr, nullptr, 17},
+ { "TurkishISO88599", nullptr, _("Turkish (ISO-8859-9)"), nullptr, nullptr, 18},
+ { "TurkishCP1254", nullptr, _("Turkish (CP1254)"), nullptr, nullptr, 19},
+ { "WesternCP1252", nullptr, _("Western (CP1252)"), nullptr, nullptr, 20},
+ { "WesternISO88591", nullptr, _("Western (ISO-8859-1)"), nullptr, nullptr, 21},
+ };
- GtkWidget *encoding_submenu = nullptr;
- MENU_ITEM_DATA text_menu_items[] = {
- {MI_NORMAL, _("_Copy Text Selection"), GDK_C, GDK_CONTROL_MASK, G_CALLBACK (menu_edit_copy),
- GNOME_APP_PIXMAP_STOCK, GTK_STOCK_COPY,
- NO_GOBJ_KEY, NO_GOBJ_VAL,
- NO_MENU_ITEM, NO_GSLIST},
- {MI_NORMAL, _("Find…"), GDK_F, GDK_CONTROL_MASK, G_CALLBACK (menu_edit_find),
- GNOME_APP_PIXMAP_STOCK, GTK_STOCK_FIND,
- NO_GOBJ_KEY, NO_GOBJ_VAL,
- NO_MENU_ITEM, NO_GSLIST},
- {MI_NORMAL, _("Find Next"), GDK_F3, NO_MODIFIER, G_CALLBACK (menu_edit_find_next),
- GNOME_APP_PIXMAP_NONE, NO_PIXMAP_INFO,
- NO_GOBJ_KEY, NO_GOBJ_VAL,
- NO_MENU_ITEM, NO_GSLIST},
- {MI_NORMAL, _("Find Previous"), GDK_F3, GDK_SHIFT_MASK, G_CALLBACK (menu_edit_find_prev),
- GNOME_APP_PIXMAP_NONE, NO_PIXMAP_INFO,
- NO_GOBJ_KEY, NO_GOBJ_VAL,
- NO_MENU_ITEM, NO_GSLIST},
- {MI_SEPERATOR},
- {MI_CHECK, _("_Wrap lines"), GDK_W, NO_MODIFIER, G_CALLBACK (menu_view_wrap),
- GNOME_APP_PIXMAP_NONE, NO_PIXMAP_INFO,
- NO_GOBJ_KEY, NO_GOBJ_VAL,
- &gViewerWindow->priv->wrap_mode_menu_item, NO_GSLIST},
- {MI_SEPERATOR},
- {MI_SUBMENU, _("_Encoding"), NO_KEYVAL, NO_MODIFIER, G_CALLBACK (nullptr),
- GNOME_APP_PIXMAP_NONE, NO_PIXMAP_INFO,
- NO_GOBJ_KEY, NO_GOBJ_VAL,
- &encoding_submenu, NO_GSLIST},
- {MI_NONE}
+ static const GtkToggleActionEntry imageMenuToggleEntries[] =
+ {
+ { "ShowMetadataTags", nullptr, _("Show Metadata _Tags"), "T", nullptr, (GCallback)
menu_toggle_view_exif_information, false}
};
-#define ENCODING_MENU_ITEM(label, keyval, value, item_number) {MI_RADIO, _(label), \
- keyval, NO_MODIFIER, G_CALLBACK (menu_view_set_charset), \
- GNOME_APP_PIXMAP_NONE, NO_PIXMAP_INFO, \
- G_OBJ_CHARSET_KEY, (gpointer *) GUINT_TO_POINTER(value), \
- &gViewerWindow->priv->encoding_menu_item[item_number], &text_encoding_list}
-
- GSList *text_encoding_list = nullptr;
- MENU_ITEM_DATA encoding_menu_items[] = {
- ENCODING_MENU_ITEM("_UTF-8", GDK_u, "UTF8", 0),
- ENCODING_MENU_ITEM("English (US-_ASCII)", GDK_a, "ASCII", 1),
- ENCODING_MENU_ITEM("Terminal (CP437)", GDK_q, "CP437", 2),
- ENCODING_MENU_ITEM("Arabic (ISO-8859-6)", NO_KEYVAL, "ISO-8859-6", 3),
- ENCODING_MENU_ITEM("Arabic (Windows, CP1256)", NO_KEYVAL, "ARABIC", 4),
- ENCODING_MENU_ITEM("Arabic (Dos, CP864)", NO_KEYVAL, "CP864",5 ),
- ENCODING_MENU_ITEM("Baltic (ISO-8859-4)", NO_KEYVAL, "ISO-8859-4",6 ),
- ENCODING_MENU_ITEM("Central European (ISO-8859-2)", NO_KEYVAL, "ISO-8859-2", 7),
- ENCODING_MENU_ITEM("Central European (CP1250)", NO_KEYVAL, "CP1250", 8),
- ENCODING_MENU_ITEM("Cyrillic (ISO-8859-5)", NO_KEYVAL, "ISO-8859-5", 9),
- ENCODING_MENU_ITEM("Cyrillic (CP1251)", NO_KEYVAL, "CP1251", 10),
- ENCODING_MENU_ITEM("Greek (ISO-8859-7)", NO_KEYVAL, "ISO-8859-7", 11),
- ENCODING_MENU_ITEM("Greek (CP1253)", NO_KEYVAL, "CP1253", 12),
- ENCODING_MENU_ITEM("Hebrew (Windows, CP1255)", NO_KEYVAL, "HEBREW", 13),
- ENCODING_MENU_ITEM("Hebrew (Dos, CP862)", NO_KEYVAL, "CP862", 14),
- ENCODING_MENU_ITEM("Hebrew (ISO-8859-8)", NO_KEYVAL, "ISO-8859-8", 15),
- ENCODING_MENU_ITEM("Latin 9 (ISO-8859-15))", NO_KEYVAL, "ISO-8859-15", 16),
- ENCODING_MENU_ITEM("Maltese (ISO-8859-3)", NO_KEYVAL, "ISO-8859-3", 17),
- ENCODING_MENU_ITEM("Turkish (ISO-8859-9)", NO_KEYVAL, "ISO-8859-9", 18),
- ENCODING_MENU_ITEM("Turkish (CP1254)", NO_KEYVAL, "CP1254", 19),
- ENCODING_MENU_ITEM("Western (CP1252)", NO_KEYVAL, "CP1252", 20),
- ENCODING_MENU_ITEM("Western (ISO-8859-1)", NO_KEYVAL, "ISO-8859-1", 21),
- {MI_NONE}
+ static const GtkActionEntry imageMenuEntries[] =
+ {
+ { "ImageMenu", nullptr, _("_Image") },
+ { "RotateClockwise", ROTATE_90_STOCKID, _("Rotate Clockwise"), "<Control>R",
nullptr, (GCallback) menu_image_operation },
+ { "RotateCounterClockwise", ROTATE_270_STOCKID, _("Rotate Counter Clockwis_e"), nullptr,
nullptr, (GCallback) menu_image_operation },
+ { "Rotate180", ROTATE_180_STOCKID, _("Rotate 180\xC2\xB0"),
"<Control><Shift>R", nullptr, (GCallback) menu_image_operation },
+ { "FlipVertical", FLIP_VERTICAL_STOCKID, _("Flip _Vertical"), nullptr,
nullptr, (GCallback) menu_image_operation },
+ { "FlipHorizontal", FLIP_HORIZONTAL_STOCKID, _("Flip _Horizontal"), nullptr,
nullptr, (GCallback) menu_image_operation }
};
- MENU_ITEM_DATA image_menu_items[] = {
- {MI_CHECK, _("Show Metadata _Tags"), GDK_t, NO_MODIFIER,
- G_CALLBACK (menu_view_exif_information),
- GNOME_APP_PIXMAP_NONE, NO_PIXMAP_INFO,
- NO_GOBJ_KEY, NO_GOBJ_VAL,
- NO_MENU_ITEM, NO_GSLIST},
- {MI_SEPERATOR},
- {MI_NORMAL, _("_Rotate Clockwise"), GDK_R, GDK_CONTROL_MASK,
- G_CALLBACK (menu_image_operation),
- GNOME_APP_PIXMAP_FILENAME, "gnome-commander/rotate-90-16.xpm",
- G_OBJ_IMAGE_OP_KEY, (gpointer *) GUINT_TO_POINTER (ImageRender::ROTATE_COUNTERCLOCKWISE),
- NO_MENU_ITEM, NO_GSLIST},
- {MI_NORMAL, _("Rotate Counter Clockwis_e"), NO_KEYVAL, NO_MODIFIER,
- G_CALLBACK (menu_image_operation),
- GNOME_APP_PIXMAP_FILENAME, "gnome-commander/rotate-270-16.xpm",
- G_OBJ_IMAGE_OP_KEY, (gpointer *) GUINT_TO_POINTER (ImageRender::ROTATE_COUNTERCLOCKWISE),
- NO_MENU_ITEM, NO_GSLIST},
- {MI_NORMAL, _("_Rotate 180\xC2\xB0"), GDK_r, GDK_CONTROL_MASK | GDK_SHIFT_MASK,
- G_CALLBACK (menu_image_operation),
- GNOME_APP_PIXMAP_FILENAME, "gnome-commander/rotate-180-16.xpm",
- G_OBJ_IMAGE_OP_KEY, (gpointer *) GUINT_TO_POINTER (ImageRender::ROTATE_UPSIDEDOWN),
- NO_MENU_ITEM, NO_GSLIST},
- {MI_NORMAL, _("Flip _Vertical"), NO_KEYVAL, NO_MODIFIER,
- G_CALLBACK (menu_image_operation),
- GNOME_APP_PIXMAP_FILENAME, "gnome-commander/flip-vertical-16.xpm",
- G_OBJ_IMAGE_OP_KEY, (gpointer *) GUINT_TO_POINTER (ImageRender::FLIP_VERTICAL),
- NO_MENU_ITEM, NO_GSLIST},
- {MI_NORMAL, _("Flip _Horizontal"), NO_KEYVAL, NO_MODIFIER,
- G_CALLBACK (menu_image_operation),
- GNOME_APP_PIXMAP_FILENAME, "gnome-commander/flip-horizontal-16.xpm",
- G_OBJ_IMAGE_OP_KEY, (gpointer *) GUINT_TO_POINTER (ImageRender::FLIP_HORIZONTAL),
- NO_MENU_ITEM, NO_GSLIST},
- {MI_NONE}
+ static const GtkActionEntry settingsMenuEntries[] =
+ {
+ { "SettingsMenu", nullptr, _("_Settings") },
+ { "BinaryMode", nullptr, _("_Binary Mode") },
+ { "SaveCurrentSettings", nullptr, _("_Save Current Settings"), "<Control>S", nullptr, (GCallback)
menu_settings_save_settings }
};
- GtkWidget *binary_mode_settings_submenu = nullptr;
- MENU_ITEM_DATA settings_menu_items[] = {
- {MI_SUBMENU, _("_Binary Mode"), NO_KEYVAL, NO_MODIFIER,
- G_CALLBACK (nullptr),
- GNOME_APP_PIXMAP_NONE, NO_PIXMAP_INFO,
- NO_GOBJ_KEY, NO_GOBJ_VAL,
- &binary_mode_settings_submenu, NO_GSLIST},
-
- {MI_CHECK, _("_Hexadecimal Offset"), GDK_d, GDK_CONTROL_MASK,
- G_CALLBACK (menu_settings_hex_decimal_offset),
- GNOME_APP_PIXMAP_NONE, NO_PIXMAP_INFO,
- NO_GOBJ_KEY, NO_GOBJ_VAL,
- &gViewerWindow->priv->hex_offset_menu_item, NO_GSLIST},
- {MI_SEPERATOR},
- {MI_NORMAL, _("_Save Current Settings"), GDK_s, GDK_CONTROL_MASK,
- G_CALLBACK (menu_settings_save_settings),
- GNOME_APP_PIXMAP_NONE, NO_PIXMAP_INFO,
- NO_GOBJ_KEY, NO_GOBJ_VAL,
- NO_MENU_ITEM, NO_GSLIST},
- {MI_NONE}
+ static const GtkToggleActionEntry settingsMenuToggleEntries[] =
+ {
+ { "HexadecimalOffset", nullptr, _("_Hexadecimal Offset"), "<Control>D", nullptr, (GCallback)
menu_settings_hex_decimal_offset, true }
};
- GSList *binmode_chars_per_line_list = nullptr;
- MENU_ITEM_DATA binmode_settings_menu_items[] = {
- {MI_RADIO, _("_20 chars/line"), GDK_2, GDK_CONTROL_MASK | GDK_SHIFT_MASK,
- G_CALLBACK (menu_settings_binary_bytes_per_line),
- GNOME_APP_PIXMAP_NONE, NO_PIXMAP_INFO,
- G_OBJ_BYTES_PER_LINE_KEY, (gpointer *) GUINT_TO_POINTER(20),
- &gViewerWindow->priv->fixed_limit_menu_items[0], &binmode_chars_per_line_list},
- {MI_RADIO, _("_40 chars/line"), GDK_4, GDK_CONTROL_MASK | GDK_SHIFT_MASK,
- G_CALLBACK (menu_settings_binary_bytes_per_line),
- GNOME_APP_PIXMAP_NONE, NO_PIXMAP_INFO,
- G_OBJ_BYTES_PER_LINE_KEY, (gpointer *) GUINT_TO_POINTER(40),
- &gViewerWindow->priv->fixed_limit_menu_items[1], &binmode_chars_per_line_list},
- {MI_RADIO, _("_80 chars/line"), GDK_8, GDK_CONTROL_MASK | GDK_SHIFT_MASK,
- G_CALLBACK (menu_settings_binary_bytes_per_line),
- GNOME_APP_PIXMAP_NONE, NO_PIXMAP_INFO,
- G_OBJ_BYTES_PER_LINE_KEY, (gpointer *) GUINT_TO_POINTER(80),
- &gViewerWindow->priv->fixed_limit_menu_items[2], &binmode_chars_per_line_list},
- {MI_NONE}
+ static const GtkRadioActionEntry settingsMenuRadioEntries[] =
+ {
+ { "20CharsPerLine", nullptr, _("_20 chars/line"), "<Control>2", nullptr, 20},
+ { "40CharsPerLine", nullptr, _("_40 chars/line"), "<Control>4", nullptr, 40},
+ { "80CharsPerLine", nullptr, _("_80 chars/line"), "<Control>8", nullptr, 80}
};
- MENU_ITEM_DATA help_menu_items[] = {
- {MI_NORMAL, _("Quick _Help"), GDK_F1, NO_MODIFIER,
- G_CALLBACK (menu_help_quick_help),
- GNOME_APP_PIXMAP_STOCK, GTK_STOCK_HELP,
- NO_GOBJ_KEY, NO_GOBJ_VAL,
- NO_MENU_ITEM, NO_GSLIST},
- {MI_NORMAL, _("_Keyboard Shortcuts"), NO_KEYVAL, NO_MODIFIER,
- G_CALLBACK (menu_help_keyboard),
- GNOME_APP_PIXMAP_NONE, NO_PIXMAP_INFO,
- NO_GOBJ_KEY, NO_GOBJ_VAL,
- NO_MENU_ITEM, NO_GSLIST},
- {MI_NONE}
+ static const GtkActionEntry helpMenuEntries[] =
+ {
+ { "HelpMenu", nullptr, _("_Help") },
+ { "QuickHelp", GTK_STOCK_HELP, _("Quick _Help"), "F1", nullptr, (GCallback)
menu_help_quick_help },
+ { "KeyboardShortcuts", GTK_STOCK_ITALIC, _("_Keyboard Shortcuts"), nullptr, nullptr, (GCallback)
menu_help_keyboard }
};
- int_viewer_menu = gtk_menu_bar_new ();
- gViewerWindow->priv->accel_group = gtk_accel_group_new ();
+ //gViewerWindow->priv->accel_group = gtk_accel_group_new ();
- // File Menu
- submenu = create_sub_menu(_("_File"), int_viewer_menu);
- create_menu_items(submenu, gViewerWindow->priv->accel_group, gViewerWindow, file_menu_items);
+ GtkActionGroup *actionGroup;
+ GtkAccelGroup *accelGroup;
+ GtkUIManager *uiManager;
+ GError *error;
- submenu = create_sub_menu(_("_View"), int_viewer_menu);
- create_menu_items(submenu, gViewerWindow->priv->accel_group, gViewerWindow, view_menu_items);
+ actionGroup = gtk_action_group_new ("InternalViewerMenuBarActions");
+ gtk_action_group_add_actions (actionGroup, fileMenuEntries, G_N_ELEMENTS (fileMenuEntries),
gViewerWindow);
+ gtk_action_group_add_actions (actionGroup, viewMenuEntries, G_N_ELEMENTS (viewMenuEntries),
gViewerWindow);
+ gtk_action_group_add_actions (actionGroup, textMenuEntries, G_N_ELEMENTS (textMenuEntries),
gViewerWindow);
+ gtk_action_group_add_actions (actionGroup, imageMenuEntries, G_N_ELEMENTS (imageMenuEntries),
gViewerWindow);
+ gtk_action_group_add_actions (actionGroup, settingsMenuEntries, G_N_ELEMENTS (settingsMenuEntries),
gViewerWindow);
+ gtk_action_group_add_actions (actionGroup, helpMenuEntries, G_N_ELEMENTS (helpMenuEntries),
gViewerWindow);
- submenu = create_sub_menu(_("_Text"), int_viewer_menu);
- create_menu_items(submenu, gViewerWindow->priv->accel_group, gViewerWindow, text_menu_items);
- // "encoding_submenu" was initialized when "text_menu_items" is usd to create the "text" menu
- create_menu_items(encoding_submenu, gViewerWindow->priv->accel_group, gViewerWindow,
encoding_menu_items);
+ gtk_action_group_add_toggle_actions (actionGroup, textMenuToggleEntries, G_N_ELEMENTS
(textMenuToggleEntries), gViewerWindow);
+ gtk_action_group_add_toggle_actions (actionGroup, imageMenuToggleEntries, G_N_ELEMENTS
(imageMenuToggleEntries), gViewerWindow);
+ gtk_action_group_add_toggle_actions (actionGroup, settingsMenuToggleEntries, G_N_ELEMENTS
(settingsMenuToggleEntries), gViewerWindow);
- submenu = create_sub_menu(_("_Image"), int_viewer_menu);
- create_menu_items(submenu, gViewerWindow->priv->accel_group, gViewerWindow, image_menu_items);
+ gtk_action_group_add_radio_actions (actionGroup, viewMenuRadioEntries,
+ G_N_ELEMENTS (viewMenuRadioEntries), 0, (GCallback)
menu_view_set_display_mode, gViewerWindow);
+ gtk_action_group_add_radio_actions (actionGroup, encodingMenuRadioEntries,
+ G_N_ELEMENTS (encodingMenuRadioEntries), 0, (GCallback)
menu_view_set_charset, gViewerWindow);
+ gtk_action_group_add_radio_actions (actionGroup, settingsMenuRadioEntries,
+ G_N_ELEMENTS (settingsMenuRadioEntries), 0, (GCallback)
menu_settings_binary_bytes_per_line, gViewerWindow);
- submenu = create_sub_menu(_("_Settings"), int_viewer_menu);
- create_menu_items(submenu, gViewerWindow->priv->accel_group, gViewerWindow, settings_menu_items);
+ uiManager = gtk_ui_manager_new ();
+ gtk_ui_manager_insert_action_group (uiManager, actionGroup, 0);
- create_menu_items(binary_mode_settings_submenu, gViewerWindow->priv->accel_group, gViewerWindow,
binmode_settings_menu_items);
+ accelGroup = gtk_ui_manager_get_accel_group (uiManager);
+ gtk_window_add_accel_group (GTK_WINDOW (gViewerWindow), accelGroup);
- submenu = create_sub_menu(_("_Help"), int_viewer_menu);
- create_menu_items(submenu, gViewerWindow->priv->accel_group, gViewerWindow, help_menu_items);
+ error = nullptr;
+ if (!gtk_ui_manager_add_ui_from_string (uiManager, uiMenuBarDescription, -1, &error))
+ {
+ g_message ("building main menus failed: %s", error->message);
+ g_error_free (error);
+ exit (EXIT_FAILURE);
+ }
- gtk_window_add_accel_group (GTK_WINDOW (gViewerWindow), gViewerWindow->priv->accel_group);
- return int_viewer_menu;
+ gtk_ui_manager_ensure_update (uiManager);
+
+ // Reference toggle items: SettingsMenu->BinaryModes
+ gViewerWindow->priv->fixed_limit_menu_items[0]
+ = gtk_ui_manager_get_widget (uiManager,
"/InternalViewerMenuBar/SettingsMenu/BinaryMode/20CharsPerLine");
+ gViewerWindow->priv->fixed_limit_menu_items[1]
+ = gtk_ui_manager_get_widget (uiManager,
"/InternalViewerMenuBar/SettingsMenu/BinaryMode/40CharsPerLine");
+ gViewerWindow->priv->fixed_limit_menu_items[2]
+ = gtk_ui_manager_get_widget (uiManager,
"/InternalViewerMenuBar/SettingsMenu/BinaryMode/80CharsPerLine");
+
+ // Reference wrap item: TextMenu->WrapLines
+ gViewerWindow->priv->wrap_mode_menu_item = gtk_ui_manager_get_widget (uiManager,
"/InternalViewerMenuBar/TextMenu/WrapLines");
+
+ // Reference toggle items: TextMenu->Charsets
+ gViewerWindow->priv->encodingMenuItems.push_back(gtk_ui_manager_get_widget (uiManager,
"/InternalViewerMenuBar/TextMenu/Encoding/UTF8"));
+ gViewerWindow->priv->encodingMenuItems.push_back(gtk_ui_manager_get_widget (uiManager,
"/InternalViewerMenuBar/TextMenu/Encoding/EnglishUsAscii"));
+ gViewerWindow->priv->encodingMenuItems.push_back(gtk_ui_manager_get_widget (uiManager,
"/InternalViewerMenuBar/TextMenu/Encoding/TerminalCP437"));
+ gViewerWindow->priv->encodingMenuItems.push_back(gtk_ui_manager_get_widget (uiManager,
"/InternalViewerMenuBar/TextMenu/Encoding/ArabicISO88596"));
+ gViewerWindow->priv->encodingMenuItems.push_back(gtk_ui_manager_get_widget (uiManager,
"/InternalViewerMenuBar/TextMenu/Encoding/ArabicWindows"));
+ gViewerWindow->priv->encodingMenuItems.push_back(gtk_ui_manager_get_widget (uiManager,
"/InternalViewerMenuBar/TextMenu/Encoding/ArabicDosCP864"));
+ gViewerWindow->priv->encodingMenuItems.push_back(gtk_ui_manager_get_widget (uiManager,
"/InternalViewerMenuBar/TextMenu/Encoding/BalticISO88594"));
+ gViewerWindow->priv->encodingMenuItems.push_back(gtk_ui_manager_get_widget (uiManager,
"/InternalViewerMenuBar/TextMenu/Encoding/CentrEuISO88592"));
+ gViewerWindow->priv->encodingMenuItems.push_back(gtk_ui_manager_get_widget (uiManager,
"/InternalViewerMenuBar/TextMenu/Encoding/CentrEuCP1250"));
+ gViewerWindow->priv->encodingMenuItems.push_back(gtk_ui_manager_get_widget (uiManager,
"/InternalViewerMenuBar/TextMenu/Encoding/CyrISO88595"));
+ gViewerWindow->priv->encodingMenuItems.push_back(gtk_ui_manager_get_widget (uiManager,
"/InternalViewerMenuBar/TextMenu/Encoding/CyrCP1251"));
+ gViewerWindow->priv->encodingMenuItems.push_back(gtk_ui_manager_get_widget (uiManager,
"/InternalViewerMenuBar/TextMenu/Encoding/GreekISO88597"));
+ gViewerWindow->priv->encodingMenuItems.push_back(gtk_ui_manager_get_widget (uiManager,
"/InternalViewerMenuBar/TextMenu/Encoding/GreekCP1253"));
+ gViewerWindow->priv->encodingMenuItems.push_back(gtk_ui_manager_get_widget (uiManager,
"/InternalViewerMenuBar/TextMenu/Encoding/HebrewWin"));
+ gViewerWindow->priv->encodingMenuItems.push_back(gtk_ui_manager_get_widget (uiManager,
"/InternalViewerMenuBar/TextMenu/Encoding/HebrewDos"));
+ gViewerWindow->priv->encodingMenuItems.push_back(gtk_ui_manager_get_widget (uiManager,
"/InternalViewerMenuBar/TextMenu/Encoding/HebrewISO88598"));
+ gViewerWindow->priv->encodingMenuItems.push_back(gtk_ui_manager_get_widget (uiManager,
"/InternalViewerMenuBar/TextMenu/Encoding/Latin9"));
+ gViewerWindow->priv->encodingMenuItems.push_back(gtk_ui_manager_get_widget (uiManager,
"/InternalViewerMenuBar/TextMenu/Encoding/MalteseISO88593"));
+ gViewerWindow->priv->encodingMenuItems.push_back(gtk_ui_manager_get_widget (uiManager,
"/InternalViewerMenuBar/TextMenu/Encoding/TurkishISO88599"));
+ gViewerWindow->priv->encodingMenuItems.push_back(gtk_ui_manager_get_widget (uiManager,
"/InternalViewerMenuBar/TextMenu/Encoding/TurkishCP1254"));
+ gViewerWindow->priv->encodingMenuItems.push_back(gtk_ui_manager_get_widget (uiManager,
"/InternalViewerMenuBar/TextMenu/Encoding/WesternCP1252"));
+ gViewerWindow->priv->encodingMenuItems.push_back(gtk_ui_manager_get_widget (uiManager,
"/InternalViewerMenuBar/TextMenu/Encoding/WesternISO88591"));
+
+ // Reference toggle item SettingsMenu->HexadecimalOffset
+ gViewerWindow->priv->hex_offset_menu_item = gtk_ui_manager_get_widget (uiManager,
"/InternalViewerMenuBar/SettingsMenu/HexadecimalOffset");
+
+ // Reference toggle item ImageMenu->ShowMetadataTags
+ gViewerWindow->priv->show_exif_menu_item = gtk_ui_manager_get_widget (uiManager,
"/InternalViewerMenuBar/ImageMenu/ShowMetadataTags");
+
+ return gtk_ui_manager_get_widget (uiManager, "/InternalViewerMenuBar");
}
@@ -1045,61 +816,52 @@ static void menu_file_close (GtkMenuItem *item, GViewerWindow *obj)
}
-static void menu_view_exif_information(GtkMenuItem *item, GViewerWindow *obj)
+static void menu_toggle_view_exif_information(GtkToggleAction *item, GViewerWindow *gViewerWindow)
{
- g_return_if_fail (obj != nullptr);
- g_return_if_fail (obj->priv->viewer != nullptr);
+ g_return_if_fail (gViewerWindow);
+ g_return_if_fail (gViewerWindow->priv->viewer);
- if (gviewer_get_display_mode(obj->priv->viewer) != DISP_MODE_IMAGE)
- return;
-
- if (gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (item)))
- gviewer_window_show_metadata(obj);
- else
- gviewer_window_hide_metadata(obj);
+ gtk_toggle_action_get_active (item)
+ ? gviewer_window_show_metadata(gViewerWindow)
+ : gviewer_window_hide_metadata(gViewerWindow);
}
-static void menu_view_display_mode(GtkMenuItem *item, GViewerWindow *obj)
+static void menu_view_set_display_mode(GtkAction *notUsed, GtkRadioAction *radioAction, GViewerWindow
*gViewerWindow)
{
- g_return_if_fail (obj);
- g_return_if_fail (obj->priv->viewer);
-
- if (!gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (item)))
- return;
+ g_return_if_fail (IS_GVIEWER_WINDOW (gViewerWindow));
+ g_return_if_fail (IS_GVIEWER (gViewerWindow->priv->viewer));
- VIEWERDISPLAYMODE dispmode = (VIEWERDISPLAYMODE) GPOINTER_TO_UINT (g_object_get_data(G_OBJECT (item),
G_OBJ_DISPMODE_KEY));
+ auto dispmode = (VIEWERDISPLAYMODE) gtk_radio_action_get_current_value (radioAction);
- if (dispmode==DISP_MODE_IMAGE)
+ if (dispmode == DISP_MODE_IMAGE)
{
- if (gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (obj->priv->show_exif_menu_item)))
- gviewer_window_show_metadata(obj);
+ if (gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (gViewerWindow->priv->show_exif_menu_item)))
+ gviewer_window_show_metadata(gViewerWindow);
else
- gviewer_window_hide_metadata(obj);
+ gviewer_window_hide_metadata(gViewerWindow);
}
else
- gviewer_window_hide_metadata(obj);
+ gviewer_window_hide_metadata(gViewerWindow);
- gviewer_set_display_mode(obj->priv->viewer, dispmode);
- gtk_widget_grab_focus (GTK_WIDGET (obj->priv->viewer));
+ gviewer_set_display_mode(gViewerWindow->priv->viewer, dispmode);
+ gtk_widget_grab_focus (GTK_WIDGET (gViewerWindow->priv->viewer));
- gtk_widget_draw (GTK_WIDGET (obj->priv->viewer), nullptr);
+ gtk_widget_draw (GTK_WIDGET (gViewerWindow->priv->viewer), nullptr);
}
-static void menu_view_set_charset(GtkMenuItem *item, GViewerWindow *obj)
+static void menu_view_set_charset(GtkAction *notUsed, GtkRadioAction *radioAction, GViewerWindow
*gViewerWindow)
{
- g_return_if_fail (obj);
- g_return_if_fail (obj->priv->viewer);
-
- if (!gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (item)))
- return;
+ g_return_if_fail (IS_GVIEWER_WINDOW (gViewerWindow));
+ g_return_if_fail (IS_GVIEWER (gViewerWindow->priv->viewer));
- gchar *charset = (gchar *) g_object_get_data (G_OBJECT (item), G_OBJ_CHARSET_KEY);
+ auto charsetIndex = gtk_radio_action_get_current_value (radioAction);
+ auto charset = gViewerWindow->priv->encodingCharsets.at(charsetIndex);
g_return_if_fail (charset != nullptr);
- gviewer_set_encoding(obj->priv->viewer, charset);
- gtk_widget_draw (GTK_WIDGET (obj->priv->viewer), nullptr);
+ gviewer_set_encoding(gViewerWindow->priv->viewer, charset);
+ gtk_widget_draw (GTK_WIDGET (gViewerWindow->priv->viewer), nullptr);
}
@@ -1229,18 +991,15 @@ static void menu_view_zoom_best_fit(GtkMenuItem *item, GViewerWindow *obj)
}
-static void menu_settings_binary_bytes_per_line(GtkMenuItem *item, GViewerWindow *obj)
+static void menu_settings_binary_bytes_per_line(GtkAction *notUsed, GtkRadioAction *radioAction,
GViewerWindow *gViewerWindow)
{
- g_return_if_fail (obj);
- g_return_if_fail (obj->priv->viewer);
-
- if (!gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (item)))
- return;
+ g_return_if_fail (IS_GVIEWER_WINDOW (gViewerWindow));
+ g_return_if_fail (IS_GVIEWER (gViewerWindow->priv->viewer));
- int bytes_per_line = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (item), G_OBJ_BYTES_PER_LINE_KEY));
+ auto bytes_per_line = gtk_radio_action_get_current_value (radioAction);
- gviewer_set_fixed_limit(obj->priv->viewer, bytes_per_line);
- gtk_widget_draw (GTK_WIDGET (obj->priv->viewer), nullptr);
+ gviewer_set_fixed_limit(gViewerWindow->priv->viewer, bytes_per_line);
+ gtk_widget_draw (GTK_WIDGET (gViewerWindow), nullptr);
}
@@ -1379,58 +1138,61 @@ static void menu_edit_find_prev(GtkMenuItem *item, GViewerWindow *obj)
}
-static void menu_view_wrap(GtkMenuItem *item, GViewerWindow *obj)
+static void menu_view_wrap(GtkToggleAction *item, GViewerWindow *gViewerWindow)
{
- g_return_if_fail (obj);
- g_return_if_fail (obj->priv->viewer);
+ g_return_if_fail (gViewerWindow);
+ g_return_if_fail (gViewerWindow->priv->viewer);
- gboolean wrap = gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (item));
+ gboolean wrap = gtk_toggle_action_get_active (item);
- gviewer_set_wrap_mode(obj->priv->viewer, wrap);
- gtk_widget_draw (GTK_WIDGET (obj->priv->viewer), nullptr);
+ gviewer_set_wrap_mode(gViewerWindow->priv->viewer, wrap);
+ gtk_widget_draw (GTK_WIDGET (gViewerWindow->priv->viewer), nullptr);
}
-static void menu_settings_hex_decimal_offset(GtkMenuItem *item, GViewerWindow *obj)
+static void menu_settings_hex_decimal_offset(GtkToggleAction *item, GViewerWindow *gViewerWindow)
{
- g_return_if_fail (obj);
- g_return_if_fail (obj->priv->viewer);
+ g_return_if_fail (gViewerWindow);
+ g_return_if_fail (gViewerWindow->priv->viewer);
- gboolean hex = gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (item));
- gviewer_set_hex_offset_display(obj->priv->viewer, hex);
+ gboolean hex = gtk_toggle_action_get_active (item);
+ gviewer_set_hex_offset_display(gViewerWindow->priv->viewer, hex);
}
-void gviewer_window_load_settings(/* out */ GViewerWindowSettings *settings)
+GViewerWindowSettings *gviewer_window_get_settings()
{
- g_return_if_fail (settings != nullptr);
-
InternalViewerSettings *iv_settings;
iv_settings = iv_settings_new();
+ auto gViewerWindowSettings = new GViewerWindowSettings();
+
gchar *temp = g_settings_get_string (iv_settings->internalviewer, GCMD_GSETTINGS_IV_CHARSET);
- strncpy(settings->charset, temp, sizeof(settings->charset) - 1);
+ strncpy(gViewerWindowSettings->charset, temp, sizeof(gViewerWindowSettings->charset) - 1);
g_free (temp);
temp = g_settings_get_string (iv_settings->internalviewer, GCMD_SETTINGS_IV_FIXED_FONT_NAME);
- strncpy(settings->fixed_font_name, temp, sizeof(settings->fixed_font_name) - 1);
+ strncpy(gViewerWindowSettings->fixed_font_name, temp, sizeof(gViewerWindowSettings->fixed_font_name) -
1);
g_free (temp);
temp = g_settings_get_string (iv_settings->internalviewer, GCMD_SETTINGS_IV_VARIABLE_FONT_NAME);
- strncpy(settings->variable_font_name, temp, sizeof(settings->variable_font_name) - 1);
+ strncpy(gViewerWindowSettings->variable_font_name, temp,
sizeof(gViewerWindowSettings->variable_font_name) - 1);
g_free (temp);
- settings->hex_decimal_offset = g_settings_get_boolean (iv_settings->internalviewer,
GCMD_SETTINGS_IV_DISPLAY_HEX_OFFSET);
- settings->wrap_mode = g_settings_get_boolean (iv_settings->internalviewer, GCMD_SETTINGS_IV_WRAP_MODE);
+ gViewerWindowSettings->hex_decimal_offset = g_settings_get_boolean (iv_settings->internalviewer,
GCMD_SETTINGS_IV_DISPLAY_HEX_OFFSET);
+ gViewerWindowSettings->wrap_mode = g_settings_get_boolean (iv_settings->internalviewer,
GCMD_SETTINGS_IV_WRAP_MODE);
+
+ gViewerWindowSettings->font_size = g_settings_get_uint (iv_settings->internalviewer,
GCMD_SETTINGS_IV_FONT_SIZE);
+ gViewerWindowSettings->tab_size = g_settings_get_uint (iv_settings->internalviewer,
GCMD_SETTINGS_IV_TAB_SIZE);
+ gViewerWindowSettings->binary_bytes_per_line = g_settings_get_uint (iv_settings->internalviewer,
GCMD_SETTINGS_IV_BINARY_BYTES_PER_LINE);
+ gViewerWindowSettings->metadata_visible = g_settings_get_boolean (iv_settings->internalviewer,
GCMD_SETTINGS_IV_METADATA_VISIBLE);
- settings->font_size = g_settings_get_uint (iv_settings->internalviewer, GCMD_SETTINGS_IV_FONT_SIZE);
- settings->tab_size = g_settings_get_uint (iv_settings->internalviewer, GCMD_SETTINGS_IV_TAB_SIZE);
- settings->binary_bytes_per_line = g_settings_get_uint (iv_settings->internalviewer,
GCMD_SETTINGS_IV_BINARY_BYTES_PER_LINE);
+ gViewerWindowSettings->rect.x = g_settings_get_int (iv_settings->internalviewer,
GCMD_SETTINGS_IV_X_OFFSET);
+ gViewerWindowSettings->rect.y = g_settings_get_int (iv_settings->internalviewer,
GCMD_SETTINGS_IV_Y_OFFSET);
+ gViewerWindowSettings->rect.width = g_settings_get_uint (iv_settings->internalviewer,
GCMD_SETTINGS_IV_WINDOW_WIDTH);
+ gViewerWindowSettings->rect.height = g_settings_get_uint (iv_settings->internalviewer,
GCMD_SETTINGS_IV_WINDOW_HEIGHT);
- settings->rect.x = g_settings_get_int (iv_settings->internalviewer, GCMD_SETTINGS_IV_X_OFFSET);
- settings->rect.y = g_settings_get_int (iv_settings->internalviewer, GCMD_SETTINGS_IV_Y_OFFSET);
- settings->rect.width = g_settings_get_uint (iv_settings->internalviewer, GCMD_SETTINGS_IV_WINDOW_WIDTH);
- settings->rect.height = g_settings_get_uint (iv_settings->internalviewer,
GCMD_SETTINGS_IV_WINDOW_HEIGHT);
+ return gViewerWindowSettings;
}
@@ -1456,7 +1218,8 @@ static void menu_settings_save_settings(GtkMenuItem *item, GViewerWindow *obj)
gnome_cmd_data.set_gsettings_when_changed (iv_settings->internalviewer, GCMD_SETTINGS_IV_FONT_SIZE,
&(settings.font_size));
gnome_cmd_data.set_gsettings_when_changed (iv_settings->internalviewer, GCMD_SETTINGS_IV_TAB_SIZE,
&(settings.tab_size));
gnome_cmd_data.set_gsettings_when_changed (iv_settings->internalviewer,
GCMD_SETTINGS_IV_BINARY_BYTES_PER_LINE, &(settings.binary_bytes_per_line));
-
+ gnome_cmd_data.set_gsettings_when_changed (iv_settings->internalviewer,
GCMD_SETTINGS_IV_METADATA_VISIBLE, &(settings.metadata_visible));
+
gnome_cmd_data.set_gsettings_when_changed (iv_settings->internalviewer, GCMD_SETTINGS_IV_X_OFFSET,
&(settings.rect.x));
gnome_cmd_data.set_gsettings_when_changed (iv_settings->internalviewer, GCMD_SETTINGS_IV_Y_OFFSET,
&(settings.rect.y));
gnome_cmd_data.set_gsettings_when_changed (iv_settings->internalviewer, GCMD_SETTINGS_IV_WINDOW_WIDTH,
&(settings.rect.width));
@@ -1514,8 +1277,10 @@ inline void gviewer_window_show_metadata(GViewerWindow *w)
inline void gviewer_window_hide_metadata(GViewerWindow *obj)
{
- g_return_if_fail (obj != nullptr);
- g_return_if_fail (obj->priv->metadata_view != nullptr);
+ g_return_if_fail (obj);
+
+ if (!obj->priv->metadata_view)
+ return;
if (!obj->priv->metadata_visible)
return;
diff --git a/src/intviewer/viewer-window.h b/src/intviewer/viewer-window.h
index 2cd3a800..63093596 100644
--- a/src/intviewer/viewer-window.h
+++ b/src/intviewer/viewer-window.h
@@ -75,6 +75,7 @@ struct GViewerWindowSettings
gboolean wrap_mode;
gboolean hex_decimal_offset;
+ gboolean metadata_visible;
};
@@ -107,6 +108,8 @@ void gviewer_window_load_file (GViewerWindow *obj, GnomeCmdFile *f);
GtkWidget *gviewer_window_file_view (GnomeCmdFile *f, GViewerWindowSettings *initial_settings=NULL);
void gviewer_window_get_current_settings(GViewerWindow *obj, /* out */ GViewerWindowSettings *settings);
-void gviewer_window_set_settings(GViewerWindow *obj, /*in*/ GViewerWindowSettings *settings);
+
+GViewerWindowSettings *gviewer_window_get_settings();
+void gviewer_window_load_settings(GViewerWindow *obj, /*in*/ GViewerWindowSettings *settings);
void gviewer_window_load_settings(/* out */ GViewerWindowSettings *settings);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]