* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#include "main.h"
#include "bar.h"
-#include "bar-histogram.h"
+#include <cstring>
+
+#include <glib-object.h>
+#include <pango/pango.h>
+
+#include <config.h>
+
+#include "compat.h"
+#include "debug.h"
#include "filedata.h"
+#include "intl.h"
#include "layout.h"
+#include "main-defines.h"
#include "metadata.h"
#include "rcfile.h"
+#include "typedefs.h"
#include "ui-menu.h"
#include "ui-misc.h"
+
+namespace
+{
+
+void remove_child_from_parent(gpointer data)
+{
+ gtk_container_remove(GTK_CONTAINER(gtk_widget_get_parent(GTK_WIDGET(data))), GTK_WIDGET(data));
+}
+
+}
+
struct KnownPanes
{
PaneType type;
" </layout>"
"</gq>";
-#ifdef HAVE_LIBCHAMPLAIN
-#ifdef HAVE_LIBCHAMPLAIN_GTK
+#if HAVE_LIBCHAMPLAIN
+#if HAVE_LIBCHAMPLAIN_GTK
static const gchar default_config_gps[] =
"<gq>"
" <layout id = '_current_'>"
{PANE_EXIF, "file_info", N_("File info"), default_config_file_info},
{PANE_EXIF, "location", N_("Location and GPS"), default_config_location},
{PANE_EXIF, "copyright", N_("Copyright"), default_config_copyright},
-#ifdef HAVE_LIBCHAMPLAIN
-#ifdef HAVE_LIBCHAMPLAIN_GTK
+#if HAVE_LIBCHAMPLAIN
+#if HAVE_LIBCHAMPLAIN_GTK
{PANE_GPS, "gps", N_("GPS Map"), default_config_gps},
#endif
#endif
{
if ((keyval == GDK_KEY_Return || keyval == GDK_KEY_Escape))
{
- g_object_unref(GTK_WIDGET(data));
+ gq_gtk_widget_destroy(GTK_WIDGET(data));
}
}
+static void expander_height_cb(GtkWindow *widget, GdkEvent *, gpointer)
+{
+ gq_gtk_widget_destroy(GTK_WIDGET(widget));
+}
+
static void bar_expander_height_cb(GtkWidget *, gpointer data)
{
auto expander = static_cast<GtkWidget *>(data);
GtkWidget *window;
GtkWidget *data_box;
GList *list;
- gint x, y;
- gint w, h;
+ gint x;
+ gint y;
+ gint w;
+ gint h;
GdkDisplay *display;
GdkSeat *seat;
GdkDevice *device;
list = gtk_container_get_children(GTK_CONTAINER(expander));
data_box = static_cast<GtkWidget *>(list->data);
- window = gtk_window_new(GTK_WINDOW_POPUP);
+#if HAVE_GTK4
+ window = gtk_window_new();
+#else
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+#endif
gtk_window_set_modal(GTK_WINDOW(window), TRUE);
+ gtk_window_set_decorated(GTK_WINDOW(window), FALSE);
gq_gtk_window_set_keep_above(GTK_WINDOW(window), TRUE);
gtk_window_set_default_size(GTK_WINDOW(window), 50, 30); //** @FIXME set these values in a more sensible way */
+ g_signal_connect(window, "key-press-event", G_CALLBACK(expander_height_cb), nullptr);
- gtk_window_move(GTK_WINDOW(window), x, y);
+ gq_gtk_window_move(GTK_WINDOW(window), x, y);
gtk_widget_show(window);
gtk_widget_get_size_request(GTK_WIDGET(data_box), &w, &h);
static void bar_expander_delete_cb(GtkWidget *, gpointer data)
{
auto expander = static_cast<GtkWidget *>(data);
- g_object_unref(expander);
+ gtk_container_remove(GTK_CONTAINER(gtk_widget_get_parent(expander)), expander);
}
static void bar_expander_add_cb(GtkWidget *widget, gpointer)
gboolean bar_event(GtkWidget *bar, GdkEvent *event)
{
BarData *bd;
- GList *list, *work;
+ GList *list;
+ GList *work;
gboolean ret = FALSE;
bd = static_cast<BarData *>(g_object_get_data(G_OBJECT(bar), "bar_data"));
GtkWidget *bar_find_pane_by_id(GtkWidget *bar, PaneType type, const gchar *id)
{
BarData *bd;
- GList *list, *work;
+ GList *list;
+ GList *work;
GtkWidget *ret = nullptr;
if (!id || !id[0]) return nullptr;
list = gtk_container_get_children(GTK_CONTAINER(bd->vbox));
- g_list_free_full(list, reinterpret_cast<GDestroyNotify>(g_object_unref));
+ g_list_free_full(list, reinterpret_cast<GDestroyNotify>(remove_child_from_parent));
}
void bar_write_config(GtkWidget *bar, GString *outstr, gint indent)
{
BarData *bd;
- GList *list, *work;
+ GList *list;
+ GList *work;
if (!bar) return;
g_free(bd);
}
-#ifdef HAVE_LIBCHAMPLAIN_GTK
+#if HAVE_LIBCHAMPLAIN_GTK
/**
@FIXME this is an ugly hack that works around this bug:
https://bugzilla.gnome.org/show_bug.cgi?id=590692
add_box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
DEBUG_NAME(add_box);
gq_gtk_box_pack_end(GTK_BOX(bd->widget), add_box, FALSE, FALSE, 0);
- tbar = pref_toolbar_new(add_box, GTK_TOOLBAR_ICONS);
+ tbar = pref_toolbar_new(add_box);
bd->add_button = pref_toolbar_button(tbar, GQ_ICON_ADD, _("Add"), FALSE,
_("Add Pane"), G_CALLBACK(bar_menu_add_cb), bd);
gtk_widget_show(add_box);
-#ifdef HAVE_LIBCHAMPLAIN_GTK
+#if HAVE_LIBCHAMPLAIN_GTK
g_signal_connect(G_OBJECT(gtk_bin_get_child(GTK_BIN(scrolled))), "unrealize", G_CALLBACK(bar_unrealize_clutter_fix_cb), NULL);
#endif
GtkWidget *widget = gtk_label_new(title);
pref_label_bold(widget, TRUE, FALSE);
- /** @FIXME do not work
- * gtk_label_set_ellipsize(GTK_LABEL(widget), PANGO_ELLIPSIZE_END);
- */
+ gtk_label_set_ellipsize(GTK_LABEL(widget), PANGO_ELLIPSIZE_END);
return widget;
}