* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#include "main.h"
#include "layout.h"
-#include "bar.h"
+#include <unistd.h>
+
+#include <cstring>
+#include <utility>
+
+#include <gdk-pixbuf/gdk-pixbuf.h>
+#include <gdk/gdk.h>
+#ifdef GDK_WINDOWING_X11
+# include <gdk/gdkx.h>
+#endif
+#include <glib-object.h>
+#include <pango/pango.h>
+
#include "bar-sort.h"
+#include "bar.h"
+#include "compat.h"
+#include "debug.h"
#include "filedata.h"
#include "histogram.h"
#include "history-list.h"
-#include "image.h"
#include "image-overlay.h"
+#include "image.h"
+#include "intl.h"
#include "layout-config.h"
#include "layout-image.h"
#include "layout-util.h"
#include "logwindow.h"
+#include "main-defines.h"
+#include "main.h"
#include "menu.h"
#include "metadata.h"
#include "misc.h"
#include "ui-menu.h"
#include "ui-misc.h"
#include "ui-tabcomp.h"
-#include "utilops.h"
+#include "ui-utildlg.h"
#include "view-dir.h"
#include "view-file.h"
#include "window.h"
-#ifdef GDK_WINDOWING_X11
-#include <gdk/gdkx.h>
-#endif
+namespace
+{
-#define MAINWINDOW_DEF_WIDTH 700
-#define MAINWINDOW_DEF_HEIGHT 500
+constexpr gint MAINWINDOW_DEF_WIDTH = 700;
+constexpr gint MAINWINDOW_DEF_HEIGHT = 500;
-#define MAIN_WINDOW_DIV_HPOS (MAINWINDOW_DEF_WIDTH / 2)
-#define MAIN_WINDOW_DIV_VPOS (MAINWINDOW_DEF_HEIGHT / 2)
+constexpr gint MAIN_WINDOW_DIV_HPOS = MAINWINDOW_DEF_WIDTH / 2;
+constexpr gint MAIN_WINDOW_DIV_VPOS = MAINWINDOW_DEF_HEIGHT / 2;
-#define TOOLWINDOW_DEF_WIDTH 260
-#define TOOLWINDOW_DEF_HEIGHT 450
+constexpr gint TOOLWINDOW_DEF_WIDTH = 260;
+constexpr gint TOOLWINDOW_DEF_HEIGHT = 450;
-#define PROGRESS_WIDTH 150
-#define ZOOM_LABEL_WIDTH 120
+constexpr gint PROGRESS_WIDTH = 150;
-#define PANE_DIVIDER_SIZE 10
+constexpr gint ZOOM_LABEL_WIDTH = 120;
+constexpr gint CONFIG_WINDOW_DEF_WIDTH = 600;
+constexpr gint CONFIG_WINDOW_DEF_HEIGHT = 400;
+
+struct LayoutConfig
+{
+ LayoutWindow *lw;
+
+ GtkWidget *configwindow;
+ GtkWidget *home_path_entry;
+ GtkWidget *layout_widget;
+
+ LayoutOptions options;
+};
+
+} // namespace
GList *layout_window_list = nullptr;
LayoutWindow *current_lw = nullptr;
{
GtkWidget *box;
GtkWidget *box_folders;
- GtkWidget *scd;
+ GtkWidget *box_menu_tabcomp;
+ GtkWidget *menu_bar;
GtkWidget *menu_tool_bar;
+ GtkWidget *menu_toolbar_box;
+ GtkWidget *open_menu;
+ GtkWidget *scd;
+ GtkWidget *scroll_window;
GtkWidget *tabcomp;
- GtkWidget *menu_bar;
GtkWidget *toolbar;
- GtkWidget *scroll_window;
box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
if (!options->expand_menu_toolbar)
{
- menu_bar = layout_actions_menu_bar(lw);
-
- toolbar = layout_actions_toolbar(lw, TOOLBAR_MAIN);
+ menu_toolbar_box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
scroll_window = gq_gtk_scrolled_window_new(nullptr, nullptr);
- gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll_window), GTK_POLICY_AUTOMATIC,GTK_POLICY_NEVER);
- gq_gtk_container_add(GTK_WIDGET(scroll_window), menu_bar);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_NEVER);
+
+ if (!options->hamburger_menu)
+ {
+ menu_bar = layout_actions_menu_bar(lw);
+ gq_gtk_box_pack_start(GTK_BOX(menu_toolbar_box), menu_bar, FALSE, FALSE, 0);
+ }
- gtk_widget_show(scroll_window);
- gtk_widget_show(menu_bar);
+ toolbar = layout_actions_toolbar(lw, TOOLBAR_MAIN);
+ gq_gtk_box_pack_start(GTK_BOX(menu_toolbar_box), toolbar, FALSE, FALSE, 0);
+ gq_gtk_container_add(GTK_WIDGET(scroll_window), menu_toolbar_box);
gq_gtk_box_pack_start(GTK_BOX(box), scroll_window, FALSE, FALSE, 0);
- gq_gtk_box_pack_start(GTK_BOX(box), toolbar, FALSE, FALSE, 0);
+
+ gtk_widget_show_all(scroll_window);
}
else
{
gq_gtk_box_pack_start(GTK_BOX(lw->main_box), lw->menu_tool_bar, FALSE, FALSE, 0);
}
- tabcomp = tab_completion_new_with_history(&lw->path_entry, nullptr, "path_list", -1,
- layout_path_entry_cb, lw);
+ tabcomp = tab_completion_new_with_history(&lw->path_entry, nullptr, "path_list", -1, layout_path_entry_cb, lw);
DEBUG_NAME(tabcomp);
tab_completion_add_tab_func(lw->path_entry, layout_path_entry_tab_cb, lw);
tab_completion_add_append_func(lw->path_entry, layout_path_entry_tab_append_cb, lw);
- gq_gtk_box_pack_start(GTK_BOX(box), tabcomp, FALSE, FALSE, 0);
+
+ if (options->hamburger_menu)
+ {
+ box_menu_tabcomp = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
+ gtk_widget_show(box_menu_tabcomp);
+
+ open_menu = layout_actions_menu_bar(lw);
+ gtk_widget_set_tooltip_text(open_menu, _("Open application menu"));
+ gq_gtk_box_pack_start(GTK_BOX(box_menu_tabcomp), open_menu, FALSE, FALSE, 0);
+ gq_gtk_box_pack_start(GTK_BOX(box_menu_tabcomp), tabcomp, TRUE, TRUE, 0);
+ gq_gtk_box_pack_start(GTK_BOX(box), box_menu_tabcomp, FALSE, FALSE, 0);
+ }
+ else
+ {
+ gq_gtk_box_pack_start(GTK_BOX(box), tabcomp, FALSE, FALSE, 0);
+ }
+
gtk_widget_show(tabcomp);
gtk_widget_set_has_tooltip(GTK_WIDGET(tabcomp), TRUE);
g_signal_connect(G_OBJECT(tabcomp), "query_tooltip", G_CALLBACK(path_entry_tooltip_cb), lw);
- g_signal_connect(G_OBJECT(gtk_widget_get_parent(gtk_widget_get_parent(lw->path_entry))), "changed",
- G_CALLBACK(layout_path_entry_changed_cb), lw);
+ g_signal_connect(G_OBJECT(gtk_widget_get_parent(gtk_widget_get_parent(lw->path_entry))), "changed", G_CALLBACK(layout_path_entry_changed_cb), lw);
box_folders = GTK_WIDGET(gtk_paned_new(GTK_ORIENTATION_HORIZONTAL));
DEBUG_NAME(box_folders);
gtk_widget_show(box_folders);
- g_signal_connect(G_OBJECT(box_folders), "notify::position",
- G_CALLBACK(layout_box_folders_changed_cb), lw);
+ g_signal_connect(G_OBJECT(box_folders), "notify::position", G_CALLBACK(layout_box_folders_changed_cb), lw);
gtk_widget_show(box);
}
else
{
- gint width, height;
+ gint width;
+ gint height;
fd = image_get_fd(lw->image);
page_total = fd->page_total;
page_num = fd->page_num + 1;
layout_util_status_update_write(lw);
}
-static GtkWidget *layout_status_label(gchar *text, GtkWidget *box, gboolean start, gint size, gboolean expand)
+static GtkWidget *layout_status_label(const gchar *text, GtkWidget *box, gboolean start, gint size, gboolean expand)
{
GtkWidget *label;
GtkWidget *frame;
return TRUE;
}
-gboolean layout_geometry_get_log_window(LayoutWindow *lw, gint *x, gint *y,
- gint *w, gint *h)
+static gboolean layout_geometry_get_log_window(LayoutWindow *lw, GdkRectangle &log_window)
{
GdkWindow *window;
}
window = gtk_widget_get_window(lw->log_window);
- gdk_window_get_root_origin(window, x, y);
- *w = gdk_window_get_width(window);
- *h = gdk_window_get_height(window);
+ gdk_window_get_root_origin(window, &log_window.x, &log_window.y);
+ log_window.width = gdk_window_get_width(window);
+ log_window.height = gdk_window_get_height(window);
return TRUE;
}
static void layout_tools_setup(LayoutWindow *lw, GtkWidget *tools, GtkWidget *files)
{
GtkWidget *vbox;
- GtkWidget *w1, *w2;
+ GtkWidget *w1;
+ GtkWidget *w2;
gboolean vertical;
gboolean new_window = FALSE;
if (options->save_window_positions)
{
gtk_window_set_default_size(GTK_WINDOW(lw->tools), lw->options.float_window.w, lw->options.float_window.h);
- gtk_window_move(GTK_WINDOW(lw->tools), lw->options.float_window.x, lw->options.float_window.y);
+ gq_gtk_window_move(GTK_WINDOW(lw->tools), lw->options.float_window.x, lw->options.float_window.y);
}
else
{
gint priority_location;
GtkWidget *h;
GtkWidget *v;
- GtkWidget *w1, *w2, *w3;
+ GtkWidget *w1;
+ GtkWidget *w2;
+ GtkWidget *w3;
GtkWidget *image_sb; /* image together with sidebars in utility box */
GtkWidget *tools;
GtkWidget *files;
layout_actions_setup(lw);
+ create_toolbars(lw);
lw->group_box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
DEBUG_NAME(lw->group_box);
return;
}
- else if (lw->tools)
+
+ if (lw->tools)
{
layout_tools_geometry_sync(lw);
gq_gtk_widget_destroy(lw->tools);
if (!layout_location_vertical(static_cast<LayoutLocation>(priority_location)))
{
- GtkWidget *tmp;
-
- tmp = v;
- v = h;
- h = tmp;
+ std::swap(v, h);
}
gq_gtk_box_pack_start(GTK_BOX(lw->group_box), v, TRUE, TRUE, 0);
if (style != -1)
{
- LayoutLocation d, f, i;
+ LayoutLocation d;
+ LayoutLocation f;
+ LayoutLocation i;
layout_config_parse(style, order, &d, &f, &i);
*-----------------------------------------------------------------------------
*/
-#define CONFIG_WINDOW_DEF_WIDTH 600
-#define CONFIG_WINDOW_DEF_HEIGHT 400
-
-struct LayoutConfig
-{
- LayoutWindow *lw;
-
- GtkWidget *configwindow;
- GtkWidget *home_path_entry;
- GtkWidget *layout_widget;
-
- LayoutOptions options;
-};
-
static gint layout_config_delete_cb(GtkWidget *w, GdkEventAny *event, gpointer data);
static void layout_config_close_cb(GtkWidget *, gpointer data)
g_free(lw->options.last_path);
lw->options.last_path = g_strdup(layout_get_path(lw));
- layout_geometry_get_log_window(lw, &lw->options.log_window.x, &lw->options.log_window.y,
- &lw->options.log_window.w, &lw->options.log_window.h);
+ layout_geometry_get_log_window(lw, lw->options.log_window);
#ifdef GDK_WINDOWING_X11
GdkDisplay *display;
if (options->save_window_positions || isfile(default_path))
{
gtk_window_set_default_size(GTK_WINDOW(lw->window), lw->options.main_window.w, lw->options.main_window.h);
- gtk_window_move(GTK_WINDOW(lw->window), lw->options.main_window.x, lw->options.main_window.y);
+ gq_gtk_window_move(GTK_WINDOW(lw->window), lw->options.main_window.x, lw->options.main_window.y);
if (lw->options.main_window.maximized) gtk_window_maximize(GTK_WINDOW(lw->window));
g_idle_add(move_window_to_workspace_cb, lw);
pixbuf = pixbuf_inline(PIXBUF_INLINE_LOGO);
/** @FIXME the zoom value set here is the value, which is then copied again and again
- in "Leave Zoom at previous setting" mode. This is not ideal. */
+ in 'Leave Zoom at previous setting' mode. This is not ideal. */
image_change_pixbuf(lw->image, pixbuf, 0.0, FALSE);
g_object_unref(pixbuf);
}
WRITE_NL(); WRITE_INT(*layout, log_window.x);
WRITE_NL(); WRITE_INT(*layout, log_window.y);
- WRITE_NL(); WRITE_INT(*layout, log_window.w);
- WRITE_NL(); WRITE_INT(*layout, log_window.h);
+ WRITE_NL(); WRITE_INT(*layout, log_window.width);
+ WRITE_NL(); WRITE_INT(*layout, log_window.height);
WRITE_NL(); WRITE_INT(*layout, preferences_window.x);
WRITE_NL(); WRITE_INT(*layout, preferences_window.y);
if (READ_INT(*layout, log_window.x)) continue;
if (READ_INT(*layout, log_window.y)) continue;
- if (READ_INT(*layout, log_window.w)) continue;
- if (READ_INT(*layout, log_window.h)) continue;
+ if (READ_INT(*layout, log_window.width)) continue;
+ if (READ_INT(*layout, log_window.height)) continue;
if (READ_INT(*layout, preferences_window.x)) continue;
if (READ_INT(*layout, preferences_window.y)) continue;
return lw;
}
-
/* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */