Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/Remmina/Remmina.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGiovanni Panozzo <giovanni@panozzo.it>2017-10-24 13:14:20 +0300
committerGiovanni Panozzo <giovanni@panozzo.it>2017-10-24 23:17:03 +0300
commitc0c4437a4187e3dc9d406276aa68a8639a5a8c09 (patch)
tree6a83fd61acc103364a50af803414fd0c69275e5b
parent4629b0503141258760b50abaae1c632249727272 (diff)
Another fix for #1323
-rw-r--r--remmina-plugins/nx/nx_plugin.c4
-rw-r--r--remmina-plugins/rdp/rdp_file.c10
-rw-r--r--remmina-plugins/rdp/rdp_plugin.c4
-rw-r--r--remmina-plugins/xdmcp/xdmcp_plugin.c8
-rw-r--r--remmina/include/remmina/plugin.h2
-rw-r--r--remmina/src/remmina_connection_window.c9
-rw-r--r--remmina/src/remmina_file.c49
-rw-r--r--remmina/src/remmina_file.h2
-rw-r--r--remmina/src/remmina_file_editor.c10
-rw-r--r--remmina/src/remmina_plugin_manager.c4
-rw-r--r--remmina/src/remmina_protocol_widget.c69
-rw-r--r--remmina/src/remmina_protocol_widget.h5
12 files changed, 102 insertions, 74 deletions
diff --git a/remmina-plugins/nx/nx_plugin.c b/remmina-plugins/nx/nx_plugin.c
index f1ed4a31d..88ba80643 100644
--- a/remmina-plugins/nx/nx_plugin.c
+++ b/remmina-plugins/nx/nx_plugin.c
@@ -477,8 +477,8 @@ static gboolean remmina_plugin_nx_start_session(RemminaProtocolWidget *gp)
i = remmina_plugin_nx_service->file_get_int(remminafile, "quality", 0);
remmina_nx_session_add_parameter(nx, "link", i > 2 ? "lan" : i == 2 ? "adsl" : i == 1 ? "isdn" : "modem");
remmina_nx_session_add_parameter(nx, "geometry", "%ix%i",
- remmina_plugin_nx_service->file_get_int(remminafile, "resolution_width", 0),
- remmina_plugin_nx_service->file_get_int(remminafile, "resolution_height", 0));
+ remmina_plugin_nx_service->get_profile_remote_width(gp),
+ remmina_plugin_nx_service->get_profile_remote_height(gp));
remmina_nx_session_add_parameter(nx, "keyboard", remmina_kbtype);
remmina_nx_session_add_parameter(nx, "client", "linux");
remmina_nx_session_add_parameter(nx, "media", "0");
diff --git a/remmina-plugins/rdp/rdp_file.c b/remmina-plugins/rdp/rdp_file.c
index 7d02254b4..eb15a7d58 100644
--- a/remmina-plugins/rdp/rdp_file.c
+++ b/remmina-plugins/rdp/rdp_file.c
@@ -230,16 +230,6 @@ static RemminaFile* remmina_rdp_file_import_channel(GIOChannel* channel)
g_free(line);
}
- if (remmina_plugin_service->file_get_int(remminafile, "resolution_width", 0) > 0 &&
- remmina_plugin_service->file_get_int(remminafile, "resolution_height", 0) > 0)
- {
- p = g_strdup_printf("%ix%i",
- remmina_plugin_service->file_get_int(remminafile, "resolution_width", 0),
- remmina_plugin_service->file_get_int(remminafile, "resolution_height", 0));
- remmina_plugin_service->file_set_string(remminafile, "resolution", p);
- g_free(p);
- }
-
remmina_plugin_service->file_set_string(remminafile, "name",
remmina_plugin_service->file_get_string(remminafile, "server"));
remmina_plugin_service->file_set_string(remminafile, "protocol", "RDP");
diff --git a/remmina-plugins/rdp/rdp_plugin.c b/remmina-plugins/rdp/rdp_plugin.c
index ae93e3b11..17ebf0e7b 100644
--- a/remmina-plugins/rdp/rdp_plugin.c
+++ b/remmina-plugins/rdp/rdp_plugin.c
@@ -752,8 +752,8 @@ static gboolean remmina_rdp_main(RemminaProtocolWidget* gp)
rfi->settings->ColorDepth = 32;
}
- rfi->settings->DesktopWidth = remmina_plugin_service->file_get_int(remminafile, "resolution_width", 1024);
- rfi->settings->DesktopHeight = remmina_plugin_service->file_get_int(remminafile, "resolution_height", 768);
+ rfi->settings->DesktopWidth = remmina_plugin_service->get_profile_remote_width(gp);
+ rfi->settings->DesktopHeight = remmina_plugin_service->get_profile_remote_height(gp);
dynresw = remmina_plugin_service->file_get_int(remminafile, "dynamic_resolution_width", 0);
dynresh = remmina_plugin_service->file_get_int(remminafile, "dynamic_resolution_height", 0);
diff --git a/remmina-plugins/xdmcp/xdmcp_plugin.c b/remmina-plugins/xdmcp/xdmcp_plugin.c
index b45d7674e..2989b46ad 100644
--- a/remmina-plugins/xdmcp/xdmcp_plugin.c
+++ b/remmina-plugins/xdmcp/xdmcp_plugin.c
@@ -119,8 +119,8 @@ static gboolean remmina_plugin_xdmcp_start_xephyr(RemminaProtocolWidget *gp)
{
argv[argc++] = g_strdup("-screen");
argv[argc++] = g_strdup_printf("%ix%ix%i",
- remmina_plugin_service->file_get_int(remminafile, "resolution_width", 640),
- remmina_plugin_service->file_get_int(remminafile, "resolution_height", 480), i);
+ remmina_plugin_service->get_profile_remote_width(gp),
+ remmina_plugin_service->get_profile_remote_height(gp), i);
}
if (i == 2)
@@ -291,8 +291,8 @@ static gboolean remmina_plugin_xdmcp_open_connection(RemminaProtocolWidget *gp)
remminafile = remmina_plugin_service->protocol_plugin_get_file(gp);
- width = remmina_plugin_service->file_get_int(remminafile, "resolution_width", 640);
- height = remmina_plugin_service->file_get_int(remminafile, "resolution_height", 480);
+ width = remmina_plugin_service->get_profile_remote_width(gp);
+ height = remmina_plugin_service->get_profile_remote_height(gp);
remmina_plugin_service->protocol_plugin_set_width(gp, width);
remmina_plugin_service->protocol_plugin_set_height(gp, height);
gtk_widget_set_size_request(GTK_WIDGET(gp), width, height);
diff --git a/remmina/include/remmina/plugin.h b/remmina/include/remmina/plugin.h
index 5e90cb564..f1b94223c 100644
--- a/remmina/include/remmina/plugin.h
+++ b/remmina/include/remmina/plugin.h
@@ -227,6 +227,8 @@ typedef struct _RemminaPluginService
void (* get_server_port) (const gchar *server, gint defaultport, gchar **host, gint *port);
gboolean (* is_main_thread) (void);
gboolean (* gtksocket_available) (void);
+ gint (* get_profile_remote_width) (RemminaProtocolWidget *gp);
+ gint (* get_profile_remote_height) (RemminaProtocolWidget *gp);
} RemminaPluginService;
diff --git a/remmina/src/remmina_connection_window.c b/remmina/src/remmina_connection_window.c
index 33c4265bc..db13ac732 100644
--- a/remmina/src/remmina_connection_window.c
+++ b/remmina/src/remmina_connection_window.c
@@ -4017,8 +4017,6 @@ GtkWidget* remmina_connection_window_open_from_file_full(RemminaFile* remminafil
RemminaConnectionObject* cnnobj;
GtkWidget* protocolwidget;
- remmina_file_update_screen_resolution(remminafile);
-
cnnobj = g_new0(RemminaConnectionObject, 1);
cnnobj->remmina_file = remminafile;
@@ -4028,6 +4026,13 @@ GtkWidget* remmina_connection_window_open_from_file_full(RemminaFile* remminafil
/* Create the RemminaProtocolWidget */
protocolwidget = cnnobj->proto = remmina_protocol_widget_new();
+ /* Set default remote desktop size in the profile, so the plugins can query
+ * protocolwidget and know WxH that the user put on the profile settings */
+ remmina_protocol_widget_update_remote_resolution((RemminaProtocolWidget*)protocolwidget,
+ remmina_file_get_int(remminafile, "resolution_width", -1),
+ remmina_file_get_int(remminafile, "resolution_height", -1)
+ );
+
/* Set a name for the widget, for CSS selector */
gtk_widget_set_name(GTK_WIDGET(cnnobj->proto),"remmina-protocol-widget");
diff --git a/remmina/src/remmina_file.c b/remmina/src/remmina_file.c
index 5c7613e82..0bf359396 100644
--- a/remmina/src/remmina_file.c
+++ b/remmina/src/remmina_file.c
@@ -555,55 +555,6 @@ remmina_file_dup(RemminaFile *remminafile)
return dupfile;
}
-void remmina_file_update_screen_resolution(RemminaFile *remminafile)
-{
- TRACE_CALL("remmina_file_update_screen_resolution");
- GdkDisplay *display;
-#if GTK_CHECK_VERSION(3, 20, 0)
- /* TODO: rename to "seat" */
- GdkSeat *seat;
- GdkDevice *device;
-#else
- GdkDeviceManager *device_manager;
- GdkDevice *device;
-#endif
- GdkScreen *screen;
-#if GTK_CHECK_VERSION(3, 22, 0)
- GdkMonitor *monitor;
-#else
- gint monitor;
-#endif
- const gchar *resolution_w, *resolution_h;
- gint x, y;
- GdkRectangle rect;
-
- resolution_w = remmina_file_get_string(remminafile, "resolution_width");
- resolution_h = remmina_file_get_string(remminafile, "resolution_height");
-
- if (resolution_w == NULL || resolution_h == NULL || resolution_w[0] == 0 || resolution_h[0] == 0)
- {
- display = gdk_display_get_default();
- /* gdk_display_get_device_manager deprecated since 3.20, Use gdk_display_get_default_seat */
-#if GTK_CHECK_VERSION(3, 20, 0)
- seat = gdk_display_get_default_seat(display);
- device = gdk_seat_get_pointer(seat);
-#else
- device_manager = gdk_display_get_device_manager(display);
- device = gdk_device_manager_get_client_pointer(device_manager);
-#endif
- gdk_device_get_position(device, &screen, &x, &y);
-#if GTK_CHECK_VERSION(3, 22, 0)
- monitor = gdk_display_get_monitor_at_point(display, x, y);
- gdk_monitor_get_geometry(monitor, &rect);
-#else
- monitor = gdk_screen_get_monitor_at_point(screen, x, y);
- gdk_screen_get_monitor_geometry(screen, monitor, &rect);
-#endif
- remmina_file_set_int(remminafile, "resolution_width", rect.width);
- remmina_file_set_int(remminafile, "resolution_height", rect.height);
- }
-}
-
const gchar*
remmina_file_get_icon_name(RemminaFile *remminafile)
{
diff --git a/remmina/src/remmina_file.h b/remmina/src/remmina_file.h
index eb411bee8..e8aabb1c1 100644
--- a/remmina/src/remmina_file.h
+++ b/remmina/src/remmina_file.h
@@ -79,8 +79,6 @@ void remmina_file_save(RemminaFile *remminafile);
void remmina_file_free(RemminaFile *remminafile);
/* Duplicate a RemminaFile object */
RemminaFile* remmina_file_dup(RemminaFile *remminafile);
-/* Update the screen width and height members */
-void remmina_file_update_screen_resolution(RemminaFile *remminafile);
/* Get the protocol icon name */
const gchar* remmina_file_get_icon_name(RemminaFile *remminafile);
/* Duplicate a temporary RemminaFile and change the protocol */
diff --git a/remmina/src/remmina_file_editor.c b/remmina/src/remmina_file_editor.c
index 8a583562f..75dd81e0e 100644
--- a/remmina/src/remmina_file_editor.c
+++ b/remmina/src/remmina_file_editor.c
@@ -470,8 +470,14 @@ static GtkWidget* remmina_file_editor_create_password(RemminaFileEditor* gfe, Gt
static void remmina_file_editor_update_resolution(GtkWidget* widget, RemminaFileEditor* gfe)
{
TRACE_CALL("remmina_file_editor_update_resolution");
+ gchar* res_str;
+ res_str = g_strdup_printf("%dx%d",
+ remmina_file_get_int(gfe->priv->remmina_file, "resolution_width",0),
+ remmina_file_get_int(gfe->priv->remmina_file, "resolution_height",0)
+ );
remmina_public_load_combo_text_d(gfe->priv->resolution_custom_combo, remmina_pref.resolutions,
- remmina_file_get_string(gfe->priv->remmina_file, "resolution"), NULL);
+ res_str, NULL);
+ g_free(res_str);
}
static void remmina_file_editor_browse_resolution(GtkWidget* button, RemminaFileEditor* gfe)
@@ -1165,7 +1171,7 @@ static void remmina_file_editor_update(RemminaFileEditor* gfe)
{
/* Resolution is set to a value from the list */
custom_resolution = remmina_public_combo_get_active_text(GTK_COMBO_BOX(priv->resolution_custom_combo));
- if (sscanf(custom_resolution, "%dx%d", &w, &h) >= 2)
+ if (remmina_public_split_resolution_string(custom_resolution, &w, &h))
{
res_w = g_strdup_printf("%i", w);
res_h = g_strdup_printf("%i", h);
diff --git a/remmina/src/remmina_plugin_manager.c b/remmina/src/remmina_plugin_manager.c
index 1579ee15d..0c7b8e9e2 100644
--- a/remmina/src/remmina_plugin_manager.c
+++ b/remmina/src/remmina_plugin_manager.c
@@ -185,7 +185,9 @@ RemminaPluginService remmina_plugin_manager_service =
remmina_connection_window_open_from_file_full,
remmina_public_get_server_port,
remmina_masterthread_exec_is_main_thread,
- remmina_gtksocket_available
+ remmina_gtksocket_available,
+ remmina_protocol_widget_get_profile_remote_width,
+ remmina_protocol_widget_get_profile_remote_height
};
diff --git a/remmina/src/remmina_protocol_widget.c b/remmina/src/remmina_protocol_widget.c
index 31ab16abe..484a5a760 100644
--- a/remmina/src/remmina_protocol_widget.c
+++ b/remmina/src/remmina_protocol_widget.c
@@ -79,6 +79,10 @@ struct _RemminaProtocolWidgetPriv
RemminaHostkeyFunc hostkey_func;
gpointer hostkey_func_data;
+
+ gint profile_remote_width;
+ gint profile_remote_height;
+
};
G_DEFINE_TYPE(RemminaProtocolWidget, remmina_protocol_widget, GTK_TYPE_EVENT_BOX)
@@ -897,6 +901,21 @@ GtkWidget* remmina_protocol_widget_get_init_dialog(RemminaProtocolWidget* gp)
return gp->priv->init_dialog;
}
+gint remmina_protocol_widget_get_profile_remote_width(RemminaProtocolWidget* gp)
+{
+ TRACE_CALL("remmina_protocol_widget_get_profile_remote_width");
+ /* Returns the width of remote desktop as choosen by the user profile */
+ return gp->priv->profile_remote_width;
+}
+
+gint remmina_protocol_widget_get_profile_remote_height(RemminaProtocolWidget* gp)
+{
+ TRACE_CALL("remmina_protocol_widget_get_profile_remote_height");
+ /* Returns the height of remote desktop as choosen by the user profile */
+ return gp->priv->profile_remote_height;
+}
+
+
gint remmina_protocol_widget_get_width(RemminaProtocolWidget* gp)
{
TRACE_CALL("remmina_protocol_widget_get_width");
@@ -1315,3 +1334,53 @@ void remmina_protocol_widget_send_keys_signals(GtkWidget *widget, const guint *k
}
}
}
+
+void remmina_protocol_widget_update_remote_resolution(RemminaProtocolWidget* gp, gint w, gint h)
+{
+ TRACE_CALL("remmina_file_update_screen_resolution");
+ GdkDisplay *display;
+#if GTK_CHECK_VERSION(3, 20, 0)
+ /* TODO: rename to "seat" */
+ GdkSeat *seat;
+ GdkDevice *device;
+#else
+ GdkDeviceManager *device_manager;
+ GdkDevice *device;
+#endif
+ GdkScreen *screen;
+#if GTK_CHECK_VERSION(3, 22, 0)
+ GdkMonitor *monitor;
+#else
+ gint monitor;
+#endif
+ gint x, y;
+ GdkRectangle rect;
+
+ if (w <= 0 || h <= 0)
+ {
+ display = gdk_display_get_default();
+ /* gdk_display_get_device_manager deprecated since 3.20, Use gdk_display_get_default_seat */
+#if GTK_CHECK_VERSION(3, 20, 0)
+ seat = gdk_display_get_default_seat(display);
+ device = gdk_seat_get_pointer(seat);
+#else
+ device_manager = gdk_display_get_device_manager(display);
+ device = gdk_device_manager_get_client_pointer(device_manager);
+#endif
+ gdk_device_get_position(device, &screen, &x, &y);
+#if GTK_CHECK_VERSION(3, 22, 0)
+ monitor = gdk_display_get_monitor_at_point(display, x, y);
+ gdk_monitor_get_geometry(monitor, &rect);
+#else
+ monitor = gdk_screen_get_monitor_at_point(screen, x, y);
+ gdk_screen_get_monitor_geometry(screen, monitor, &rect);
+#endif
+ w = rect.width;
+ h = rect.height;
+ }
+ gp->priv->profile_remote_width = w;
+ gp->priv->profile_remote_height = h;
+}
+
+
+
diff --git a/remmina/src/remmina_protocol_widget.h b/remmina/src/remmina_protocol_widget.h
index 0b65645cd..fe4308224 100644
--- a/remmina/src/remmina_protocol_widget.h
+++ b/remmina/src/remmina_protocol_widget.h
@@ -84,6 +84,9 @@ gint remmina_protocol_widget_get_width(RemminaProtocolWidget *gp);
void remmina_protocol_widget_set_width(RemminaProtocolWidget *gp, gint width);
gint remmina_protocol_widget_get_height(RemminaProtocolWidget *gp);
void remmina_protocol_widget_set_height(RemminaProtocolWidget *gp, gint height);
+gint remmina_protocol_widget_get_profile_remote_width(RemminaProtocolWidget* gp);
+gint remmina_protocol_widget_get_profile_remote_height(RemminaProtocolWidget* gp);
+
RemminaScaleMode remmina_protocol_widget_get_current_scale_mode(RemminaProtocolWidget *gp);
void remmina_protocol_widget_set_current_scale_mode(RemminaProtocolWidget *gp, RemminaScaleMode scalemode);
gboolean remmina_protocol_widget_get_expand(RemminaProtocolWidget *gp);
@@ -153,6 +156,8 @@ void remmina_protocol_widget_send_keystrokes(RemminaProtocolWidget* gp, GtkMenuI
/* Take screenshot of plugin */
gboolean remmina_protocol_widget_plugin_screenshot(RemminaProtocolWidget* gp, RemminaPluginScreenshotData *rpsd);
+void remmina_protocol_widget_update_remote_resolution(RemminaProtocolWidget* gp, gint w, gint h);
+
G_END_DECLS