commit ab51e67f2be9488b9ff35079441dc7245b43934a
parent 3179afb53dee2f0a37f08cc8d975e2ee0ca2aeb0
Author: Ricardo Mones <ricardo@mones.org>
Date: Wed, 11 Jun 2025 18:27:07 +0200
Replace deprecated gdk_screen functions
Also renames 'class' parameter name which is a reserved word in C++
Removes four warnings:
container_linux.cpp:1039:51: warning: 'gint gdk_screen_width()' is deprecated
container_linux.cpp:1040:52: warning: 'gint gdk_screen_height()' is deprecated
notification_banner.c:148:25: warning: 'gdk_screen_width' is deprecated
notification_banner.c:199:17: warning: 'gdk_screen_width' is deprecated
Diffstat:
5 files changed, 49 insertions(+), 8 deletions(-)
diff --git a/src/gtk/gtkutils.c b/src/gtk/gtkutils.c
@@ -58,6 +58,8 @@
#include "manage_window.h"
#include "manual.h"
+static GdkRectangle _screen_area = { 0 };
+
gboolean gtkut_get_font_size(GtkWidget *widget,
gint *width, gint *height)
{
@@ -1417,11 +1419,11 @@ gboolean gtkut_tree_model_get_iter_last(GtkTreeModel *model,
}
GtkWidget *gtkut_window_new (GtkWindowType type,
- const gchar *class)
+ const gchar *cls)
{
GtkWidget *window = gtk_window_new(type);
- gtk_window_set_role(GTK_WINDOW(window), class);
- gtk_widget_set_name(GTK_WIDGET(window), class);
+ gtk_window_set_role(GTK_WINDOW(window), cls);
+ gtk_widget_set_name(GTK_WIDGET(window), cls);
return window;
}
@@ -2035,3 +2037,30 @@ gchar *gtkut_gdk_rgba_to_string(GdkRGBA *rgba)
return str;
}
#undef RGBA_ELEMENT_TO_BYTE
+
+static void get_screen_rectangle()
+{
+ if (_screen_area.width == 0 && _screen_area.height == 0) {
+ gdk_monitor_get_workarea(
+ gdk_display_get_primary_monitor(gdk_display_get_default()),
+ &_screen_area);
+ debug_print("saved screen area: %u x %u\n", _screen_area.width, _screen_area.height);
+ }
+}
+
+gint gtkut_gdk_screen_width()
+{
+ return _screen_area.width;
+}
+
+gint gtkut_gdk_screen_height()
+{
+ return _screen_area.height;
+}
+
+void gtkut_gdk_screen_size_changed (GdkScreen* self, gpointer data)
+{
+ _screen_area.width = 0;
+ _screen_area.height = 0;
+ get_screen_rectangle();
+}
diff --git a/src/gtk/gtkutils.h b/src/gtk/gtkutils.h
@@ -147,7 +147,7 @@ void label_window_destroy(GtkWidget *widget);
void gtkut_window_popup (GtkWidget *window);
GtkWidget *gtkut_window_new (GtkWindowType type,
- const gchar *class);
+ const gchar *cls);
void gtkut_widget_get_uposition (GtkWidget *widget,
@@ -267,4 +267,9 @@ gpointer gtkut_tree_view_get_selected_pointer(GtkTreeView *view,
gint column, GtkTreeModel **_model, GtkTreeSelection **_selection,
GtkTreeIter *_iter);
+gint gtkut_gdk_screen_width();
+gint gtkut_gdk_screen_height();
+void gtkut_gdk_screen_size_changed (GdkScreen* self, gpointer data);
+
+
#endif /* __GTKUTILS_H__ */
diff --git a/src/mainwindow.c b/src/mainwindow.c
@@ -1433,6 +1433,7 @@ MainWindow *main_window_create()
SummaryView *summaryview;
MessageView *messageview;
GtkWidget *ac_menu;
+ GdkScreen *screen;
static GdkGeometry geometry;
@@ -1462,6 +1463,11 @@ MainWindow *main_window_create()
g_signal_connect(G_OBJECT(window), "key_press_event",
G_CALLBACK(mainwindow_key_pressed), mainwin);
+ screen = gdk_screen_get_default();
+ g_signal_connect(G_OBJECT(screen), "size_changed",
+ G_CALLBACK(gtkut_gdk_screen_size_changed), NULL);
+ g_signal_emit_by_name(G_OBJECT(screen), "size_changed", NULL);
+
gtk_widget_realize(window);
gtk_widget_add_events(window, GDK_KEY_PRESS_MASK|GDK_KEY_RELEASE_MASK);
diff --git a/src/plugins/litehtml_viewer/container_linux.cpp b/src/plugins/litehtml_viewer/container_linux.cpp
@@ -26,6 +26,7 @@
#include <cmath>
#include "lh_prefs.h"
#include "utils.h"
+#include "gtk/gtkutils.h"
#ifndef M_PI
# define M_PI 3.14159265358979323846
@@ -1036,8 +1037,8 @@ void container_linux::get_media_features(litehtml::media_features& media) const
media.type = litehtml::media_type_screen;
media.width = client.width;
media.height = client.height;
- media.device_width = gdk_screen_width();
- media.device_height = gdk_screen_height();
+ media.device_width = gtkut_gdk_screen_width();
+ media.device_height = gtkut_gdk_screen_height();
media.color = 8;
media.monochrome = 0;
media.color_index = 256;
diff --git a/src/plugins/notification/notification_banner.c b/src/plugins/notification/notification_banner.c
@@ -145,7 +145,7 @@ static void notification_banner_create(GSList *msg_list)
if(notify_config.banner_width > 0)
gtk_widget_set_size_request(banner.window, notify_config.banner_width, -1);
else
- gtk_widget_set_size_request(banner.window, gdk_screen_width(), -1);
+ gtk_widget_set_size_request(banner.window, gtkut_gdk_screen_width(), -1);
gtk_window_set_keep_above(GTK_WINDOW(banner.window), TRUE);
gtk_window_set_accept_focus(GTK_WINDOW(banner.window), FALSE);
gtk_window_set_skip_taskbar_hint(GTK_WINDOW(banner.window), TRUE);
@@ -196,7 +196,7 @@ static void notification_banner_create(GSList *msg_list)
if (notify_config.banner_width > 0)
banner_width = notify_config.banner_width;
else
- banner_width = gdk_screen_width();
+ banner_width = gtkut_gdk_screen_width();
if(requisition.width > banner_width) {
/* Line is too big for screen! */