diff options
author | Giovanni Panozzo <giovanni@panozzo.it> | 2017-10-24 13:14:20 +0300 |
---|---|---|
committer | Giovanni Panozzo <giovanni@panozzo.it> | 2017-10-24 23:17:03 +0300 |
commit | c0c4437a4187e3dc9d406276aa68a8639a5a8c09 (patch) | |
tree | 6a83fd61acc103364a50af803414fd0c69275e5b | |
parent | 4629b0503141258760b50abaae1c632249727272 (diff) |
Another fix for #1323
-rw-r--r-- | remmina-plugins/nx/nx_plugin.c | 4 | ||||
-rw-r--r-- | remmina-plugins/rdp/rdp_file.c | 10 | ||||
-rw-r--r-- | remmina-plugins/rdp/rdp_plugin.c | 4 | ||||
-rw-r--r-- | remmina-plugins/xdmcp/xdmcp_plugin.c | 8 | ||||
-rw-r--r-- | remmina/include/remmina/plugin.h | 2 | ||||
-rw-r--r-- | remmina/src/remmina_connection_window.c | 9 | ||||
-rw-r--r-- | remmina/src/remmina_file.c | 49 | ||||
-rw-r--r-- | remmina/src/remmina_file.h | 2 | ||||
-rw-r--r-- | remmina/src/remmina_file_editor.c | 10 | ||||
-rw-r--r-- | remmina/src/remmina_plugin_manager.c | 4 | ||||
-rw-r--r-- | remmina/src/remmina_protocol_widget.c | 69 | ||||
-rw-r--r-- | remmina/src/remmina_protocol_widget.h | 5 |
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 |