40 #include <freerdp/locale/keyboard.h> 58 if (value && value[0])
72 #define REMMINA_TYPE_PLUGIN_RDPSET_GRID (remmina_rdp_settings_grid_get_type()) 73 #define REMMINA_RDPSET_GRID(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), REMMINA_TYPE_PLUGIN_RDPSET_GRID, RemminaPluginRdpsetGrid)) 74 #define REMMINA_RDPSET_GRID_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), REMMINA_TYPE_PLUGIN_RDPSET_GRID, RemminaPluginRdpsetGridClass)) 75 #define REMMINA_IS_PLUGIN_RDPSET_GRID(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), REMMINA_TYPE_PLUGIN_RDPSET_GRID)) 76 #define REMMINA_IS_PLUGIN_RDPSET_GRID_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), REMMINA_TYPE_PLUGIN_RDPSET_GRID)) 77 #define REMMINA_RDPSET_GRID_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), REMMINA_TYPE_PLUGIN_RDPSET_GRID, RemminaPluginRdpsetGridClass)) 120 TRACE_CALL(__func__);
125 TRACE_CALL(__func__);
132 grid = REMMINA_RDPSET_GRID(widget);
139 s = g_strdup_printf(
"%X", new_layout);
171 s = g_strdup_printf(
"%d", val);
176 s = g_strdup_printf(
"%d", val);
185 s = g_strdup_printf(
"%d", val);
193 TRACE_CALL(__func__);
197 RDP_KEYBOARD_LAYOUT* layouts;
207 layouts = freerdp_keyboard_get_layouts(RDP_KEYBOARD_LAYOUT_TYPE_STANDARD | RDP_KEYBOARD_LAYOUT_TYPE_VARIANT);
209 for (i = 0; layouts[i].code; i++) {
210 s = g_strdup_printf(
"%08X - %s", layouts[i].code, layouts[i].name);
229 TRACE_CALL(__func__);
245 TRACE_CALL(__func__);
262 TRACE_CALL(__func__);
267 gtk_list_store_set(grid->
quality_store, &iter, 0, -1, 1, _(
"<Choose a quality level to edit…>"), -1);
269 gtk_list_store_set(grid->
quality_store, &iter, 0, 0, 1, _(
"Poor (fastest)"), -1);
271 gtk_list_store_set(grid->
quality_store, &iter, 0, 1, 1, _(
"Medium"), -1);
273 gtk_list_store_set(grid->
quality_store, &iter, 0, 2, 1, _(
"Good"), -1);
275 gtk_list_store_set(grid->
quality_store, &iter, 0, 9, 1, _(
"Best (slowest)"), -1);
280 grid->
quality_values[0] = (value && value[0] ? strtoul(value, NULL, 16) : DEFAULT_QUALITY_0);
284 grid->
quality_values[1] = (value && value[0] ? strtoul(value, NULL, 16) : DEFAULT_QUALITY_1);
288 grid->
quality_values[2] = (value && value[0] ? strtoul(value, NULL, 16) : DEFAULT_QUALITY_2);
292 grid->
quality_values[9] = (value && value[0] ? strtoul(value, NULL, 16) : DEFAULT_QUALITY_9);
298 TRACE_CALL(__func__);
318 TRACE_CALL(__func__);
324 if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(grid->
quality_combo), &iter)) {
325 gtk_tree_model_get(GTK_TREE_MODEL(grid->
quality_store), &iter, 0, &i, -1);
326 sensitive = ( i != -1 );
333 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(grid->
wallpaper_check), (v & 1) == 0);
334 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(grid->
windowdrag_check), (v & 2) == 0);
336 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(grid->
theme_check), (v & 8) == 0);
337 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(grid->
cursorshadow_check), (v & 0x20) == 0);
339 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(grid->
fontsmoothing_check), (v & 0x80) != 0);
340 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(grid->
composition_check), (v & 0x100) != 0);
343 gtk_widget_set_sensitive(GTK_WIDGET(grid->
wallpaper_check), sensitive);
346 gtk_widget_set_sensitive(GTK_WIDGET(grid->
theme_check), sensitive);
356 TRACE_CALL(__func__);
361 if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(grid->
quality_combo), &iter)) {
362 gtk_tree_model_get(GTK_TREE_MODEL(grid->
quality_store), &iter, 0, &i, -1);
365 v |= (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(grid->
wallpaper_check)) ? 0 : 1);
366 v |= (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(grid->
windowdrag_check)) ? 0 : 2);
368 v |= (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(grid->
theme_check)) ? 0 : 8);
369 v |= (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(grid->
cursorshadow_check)) ? 0 : 0x20);
371 v |= (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(grid->
fontsmoothing_check)) ? 0x80 : 0);
372 v |= (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(grid->
composition_check)) ? 0x100 : 0);
385 m = gtk_combo_box_get_model(combo);
390 valid = gtk_tree_model_get_iter_first(m, &iter);
392 gtk_tree_model_get(m, &iter, 0, &i, -1);
394 gtk_combo_box_set_active_iter(combo, &iter);
396 valid = gtk_tree_model_iter_next(m, &iter);
403 TRACE_CALL(__func__);
406 GtkCellRenderer* renderer;
407 int desktopOrientation, desktopScaleFactor, deviceScaleFactor;
411 gtk_grid_set_row_homogeneous(GTK_GRID(grid), FALSE);
412 gtk_grid_set_column_homogeneous(GTK_GRID(grid), FALSE);
413 gtk_container_set_border_width(GTK_CONTAINER(grid), 8);
414 gtk_grid_set_row_spacing(GTK_GRID(grid), 4);
415 gtk_grid_set_column_spacing(GTK_GRID(grid), 4);
418 widget = gtk_label_new(_(
"Keyboard layout"));
419 gtk_widget_show(widget);
420 gtk_widget_set_halign(GTK_WIDGET(widget), GTK_ALIGN_START);
421 gtk_widget_set_valign(GTK_WIDGET(widget), GTK_ALIGN_CENTER);
422 gtk_grid_attach(GTK_GRID(grid), widget, 0, 0, 1, 1);
426 gtk_widget_show(widget);
427 gtk_grid_attach(GTK_GRID(grid), widget, 1, 0, 4, 1);
429 renderer = gtk_cell_renderer_text_new();
430 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(widget), renderer, TRUE);
431 gtk_cell_layout_add_attribute(GTK_CELL_LAYOUT(widget), renderer,
"text", 1);
434 widget = gtk_label_new(
"-");
435 gtk_widget_show(widget);
436 gtk_widget_set_halign(GTK_WIDGET(widget), GTK_ALIGN_START);
437 gtk_widget_set_valign(GTK_WIDGET(widget), GTK_ALIGN_CENTER);
438 gtk_grid_attach(GTK_GRID(grid), widget, 1, 1, 4, 2);
443 widget = gtk_check_button_new_with_label(_(
"Use client keyboard mapping"));
444 gtk_widget_show(widget);
445 gtk_grid_attach(GTK_GRID(grid), widget, 1, 3, 3, 3);
449 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget),
450 s && s[0] ==
'1' ? TRUE : FALSE);
453 widget = gtk_label_new(_(
"Quality settings"));
454 gtk_widget_show(widget);
455 gtk_widget_set_halign(GTK_WIDGET(widget), GTK_ALIGN_START);
456 gtk_widget_set_valign(GTK_WIDGET(widget), GTK_ALIGN_CENTER);
457 gtk_grid_attach(GTK_GRID(grid), widget, 0, 6, 1, 4);
459 grid->
quality_store = gtk_list_store_new(2, G_TYPE_UINT, G_TYPE_STRING);
460 widget = gtk_combo_box_new_with_model(GTK_TREE_MODEL(grid->
quality_store));
461 gtk_widget_show(widget);
462 gtk_grid_attach(GTK_GRID(grid), widget, 1, 6, 4, 4);
464 renderer = gtk_cell_renderer_text_new();
465 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(widget), renderer, TRUE);
466 gtk_cell_layout_add_attribute(GTK_CELL_LAYOUT(widget), renderer,
"text", 1);
467 g_signal_connect(G_OBJECT(widget),
"changed",
473 widget = gtk_check_button_new_with_label(_(
"Wallpaper"));
474 gtk_widget_show(widget);
475 gtk_grid_attach(GTK_GRID(grid), widget, 1, 10, 2, 5);
476 g_signal_connect(G_OBJECT(widget),
"toggled",
480 widget = gtk_check_button_new_with_label(_(
"Window drag"));
481 gtk_widget_show(widget);
482 gtk_grid_attach(GTK_GRID(grid), widget, 3, 10, 3, 5);
483 g_signal_connect(G_OBJECT(widget),
"toggled",
487 widget = gtk_check_button_new_with_label(_(
"Menu animation"));
488 gtk_widget_show(widget);
489 gtk_grid_attach(GTK_GRID(grid), widget, 1, 13, 2, 6);
490 g_signal_connect(G_OBJECT(widget),
"toggled",
494 widget = gtk_check_button_new_with_label(_(
"Theme"));
495 gtk_widget_show(widget);
496 gtk_grid_attach(GTK_GRID(grid), widget, 3, 13, 3, 6);
497 g_signal_connect(G_OBJECT(widget),
"toggled",
501 widget = gtk_check_button_new_with_label(_(
"Cursor shadow"));
502 gtk_widget_show(widget);
503 gtk_grid_attach(GTK_GRID(grid), widget, 1, 16, 2, 7);
504 g_signal_connect(G_OBJECT(widget),
"toggled",
508 widget = gtk_check_button_new_with_label(_(
"Cursor blinking"));
509 gtk_widget_show(widget);
510 gtk_grid_attach(GTK_GRID(grid), widget, 3, 16, 3, 7);
511 g_signal_connect(G_OBJECT(widget),
"toggled",
515 widget = gtk_check_button_new_with_label(_(
"Font smoothing"));
516 gtk_widget_show(widget);
517 gtk_grid_attach(GTK_GRID(grid), widget, 1, 19, 2, 8);
518 g_signal_connect(G_OBJECT(widget),
"toggled",
522 widget = gtk_check_button_new_with_label(_(
"Composition"));
523 gtk_widget_show(widget);
524 gtk_grid_attach(GTK_GRID(grid), widget, 3, 19, 3, 8);
525 g_signal_connect(G_OBJECT(widget),
"toggled",
529 gtk_combo_box_set_active(GTK_COMBO_BOX(grid->
quality_combo), 0);
532 widget = gtk_label_new(_(
"Remote scale factor"));
533 gtk_widget_show(widget);
534 gtk_widget_set_halign(GTK_WIDGET(widget), GTK_ALIGN_START);
535 gtk_widget_set_valign(GTK_WIDGET(widget), GTK_ALIGN_CENTER);
536 gtk_grid_attach(GTK_GRID(grid), widget, 0, 27, 1, 1);
545 widget = gtk_label_new(_(
"Desktop scale factor %"));
546 gtk_widget_show(widget);
547 gtk_widget_set_halign(GTK_WIDGET(widget), GTK_ALIGN_START);
548 gtk_widget_set_valign(GTK_WIDGET(widget), GTK_ALIGN_CENTER);
549 gtk_grid_attach(GTK_GRID(grid), widget, 1, 27, 1, 1);
551 widget = gtk_spin_button_new_with_range(0, 10000, 1);
552 gtk_widget_show(widget);
553 gtk_grid_attach(GTK_GRID(grid), widget, 2, 27, 1, 1);
556 widget = gtk_label_new(_(
"Device scale factor %"));
557 gtk_widget_show(widget);
558 gtk_widget_set_halign(GTK_WIDGET(widget), GTK_ALIGN_START);
559 gtk_widget_set_valign(GTK_WIDGET(widget), GTK_ALIGN_CENTER);
560 gtk_grid_attach(GTK_GRID(grid), widget, 1, 28, 1, 1);
563 gtk_widget_show(widget);
564 gtk_grid_attach(GTK_GRID(grid), widget, 2, 28, 1, 1);
566 renderer = gtk_cell_renderer_text_new();
567 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(widget), renderer, TRUE);
568 gtk_cell_layout_add_attribute(GTK_CELL_LAYOUT(widget), renderer,
"text", 1);
574 g_signal_connect(G_OBJECT(widget),
"changed",
578 widget = gtk_label_new(_(
"Desktop orientation"));
579 gtk_widget_show(widget);
580 gtk_widget_set_halign(GTK_WIDGET(widget), GTK_ALIGN_START);
581 gtk_widget_set_valign(GTK_WIDGET(widget), GTK_ALIGN_CENTER);
582 gtk_grid_attach(GTK_GRID(grid), widget, 0, 29, 1, 1);
585 gtk_widget_show(widget);
586 gtk_grid_attach(GTK_GRID(grid), widget, 1, 29, 1, 1);
588 renderer = gtk_cell_renderer_text_new();
589 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(widget), renderer, TRUE);
590 gtk_cell_layout_add_attribute(GTK_CELL_LAYOUT(widget), renderer,
"text", 1);
599 TRACE_CALL(__func__);
602 widget = GTK_WIDGET(g_object_new(REMMINA_TYPE_PLUGIN_RDPSET_GRID, NULL));
603 gtk_widget_show(widget);
610 TRACE_CALL(__func__);
614 int orientation, dpsf, desf;
617 *desktopOrientation = *desktopScaleFactor = *deviceScaleFactor = 0;
620 orientation = s ? atoi(s) : 0;
622 if (orientation != 90 && orientation != 180 && orientation != 270)
624 *desktopOrientation = orientation;
627 dpsf = s ? atoi(s) : 0;
629 if (dpsf < 100 || dpsf > 500)
633 desf = s ? atoi(s) : 0;
635 if (desf != 100 && desf != 140 && desf != 180)
638 *desktopScaleFactor = dpsf;
639 *deviceScaleFactor = desf;
GtkListStore * device_scale_factor_store
GtkWidget * composition_check
GtkWidget * keyboard_layout_label
static void remmina_rdp_settings_grid_load_devicescalefactor_combo(RemminaPluginRdpsetGrid *grid)
static guint keyboard_layout
GtkListStore * desktop_orientation_store
GtkWidget * fontsmoothing_check
static guint rdp_keyboard_layout
GtkListStore * quality_store
static void remmina_rdp_settings_grid_init(RemminaPluginRdpsetGrid *grid)
GType remmina_rdp_settings_grid_get_type(void)
GtkWidget * cursorblinking_check
static void remmina_rdp_settings_grid_load_layout(RemminaPluginRdpsetGrid *grid)
GtkWidget * wallpaper_check
void remmina_rdp_settings_get_orientation_scale_prefs(int *desktopOrientation, int *desktopScaleFactor, int *deviceScaleFactor)
static void remmina_rdp_settings_quality_option_on_toggled(GtkToggleButton *togglebutton, RemminaPluginRdpsetGrid *grid)
GtkWidget * menuanimation_check
void remmina_rdp_settings_init(void)
struct _RemminaPluginRdpsetGridClass RemminaPluginRdpsetGridClass
static void remmina_rdp_settings_grid_load_quality(RemminaPluginRdpsetGrid *grid)
GtkWidget * desktop_scale_factor_spin
GtkWidget * remmina_rdp_settings_new(void)
void(* pref_set_value)(const gchar *key, const gchar *value)
struct _RemminaPluginRdpsetGrid RemminaPluginRdpsetGrid
GtkWidget * use_client_keymap_check
G_DEFINE_TYPE(RemminaConnectionWindow, rcw, GTK_TYPE_WINDOW)
GtkWidget * quality_combo
static RemminaPluginService * remmina_plugin_service
static void remmina_rdp_settings_kbd_init(void)
gchar *(* pref_get_value)(const gchar *key)
GtkWidget * cursorshadow_check
GtkWidget * desktop_orientation_combo
static void remmina_rdp_settings_set_combo_active_item(GtkComboBox *combo, int itemval)
static void remmina_rdp_settings_appscale_on_changed(GtkComboBox *widget, RemminaPluginRdpsetGrid *grid)
static void remmina_rdp_settings_grid_destroy(GtkWidget *widget, gpointer data)
GtkWidget * windowdrag_check
GtkWidget * device_scale_factor_combo
GtkWidget * keyboard_layout_combo
static void remmina_rdp_settings_grid_load_desktoporientation_combo(RemminaPluginRdpsetGrid *grid)
GtkGridClass parent_class
static void remmina_rdp_settings_quality_on_changed(GtkComboBox *widget, RemminaPluginRdpsetGrid *grid)
GtkListStore * keyboard_layout_store
guint remmina_rdp_settings_get_keyboard_layout(void)