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:
authormyheroyuki <myheroyuki@outlook.com>2023-09-12 15:50:30 +0300
committermyheroyuki <myheroyuki@outlook.com>2023-09-12 15:50:30 +0300
commitf54941dd9cb9fa856ac3a26ca3a48efb93d4c2f8 (patch)
tree53866dc48686812b58346a27f442154bb922fdda
parent390f4eba1f007f672e811d6e2bf7045896ee303b (diff)
Some small bug fixes, fix keyboard focus for rdp connections, fix fullscreen creation
-rw-r--r--plugins/rdp/rdp_event.c4
-rw-r--r--src/rcw.c51
-rw-r--r--src/remmina_message_panel.h2
-rw-r--r--src/remmina_plugin_native.c2
-rw-r--r--src/remmina_scrolled_viewport.h2
5 files changed, 25 insertions, 36 deletions
diff --git a/plugins/rdp/rdp_event.c b/plugins/rdp/rdp_event.c
index 18ab48913..b4b3952be 100644
--- a/plugins/rdp/rdp_event.c
+++ b/plugins/rdp/rdp_event.c
@@ -589,6 +589,7 @@ static gboolean remmina_rdp_event_on_button_press(GtkGestureClick *self, gint n_
gboolean extended = FALSE;
RemminaPluginRdpEvent rdp_event = { 0 };
gint primary, secondary;
+ rfContext *rfi = GET_PLUGIN_DATA(gp);
RemminaFile *remminafile;
@@ -636,7 +637,7 @@ static gboolean remmina_rdp_event_on_button_press(GtkGestureClick *self, gint n_
else
flag |= PTR_FLAGS_DOWN;
-
+ gtk_widget_grab_focus(rfi->drawing_area);
rdp_event.type = REMMINA_RDP_EVENT_TYPE_MOUSE;
remmina_rdp_event_translate_pos(gp, x, y, &rdp_event.mouse_event.x, &rdp_event.mouse_event.y);
@@ -1056,7 +1057,6 @@ void remmina_rdp_event_init(RemminaProtocolWidget *gp)
gtk_gesture_single_set_button((GtkGestureSingle*)gesture, 0);
g_signal_connect (gesture, "pressed", G_CALLBACK (remmina_rdp_event_on_button_press), gp);
g_signal_connect (gesture, "released", G_CALLBACK (remmina_rdp_event_on_button_release), gp);
- gtk_event_controller_set_propagation_phase(GTK_EVENT_CONTROLLER(gesture), GTK_PHASE_TARGET);
gtk_widget_add_controller(rfi->drawing_area, GTK_EVENT_CONTROLLER (gesture));
diff --git a/src/rcw.c b/src/rcw.c
index 3547edf21..573303398 100644
--- a/src/rcw.c
+++ b/src/rcw.c
@@ -152,7 +152,7 @@ struct _RemminaConnectionWindowPriv {
* to restore a scrolled window mode after coming from fullscreen */
gint ss_width, ss_height;
gboolean ss_maximized;
- gint active_monitor;
+ GdkMonitor* active_monitor;
gboolean kbcaptured;
gboolean pointer_captured;
@@ -1394,20 +1394,16 @@ static void rcw_migrate(RemminaConnectionWindow *from, RemminaConnectionWindow *
g_object_ref(cnnobj->viewport);
if (GTK_IS_SCROLLED_WINDOW(cnnobj->scrolled_container)){
gtk_scrolled_window_set_child(GTK_SCROLLED_WINDOW(old_scrolled_container), NULL);
+ gtk_widget_unparent(cnnobj->viewport);
gtk_scrolled_window_set_child(GTK_SCROLLED_WINDOW(cnnobj->scrolled_container), cnnobj->viewport);
g_object_unref(cnnobj->viewport);
}
else{
gtk_scrolled_window_set_child(GTK_SCROLLED_WINDOW(old_scrolled_container), NULL);
+ gtk_widget_unparent(cnnobj->viewport);
gtk_box_append(GTK_BOX(cnnobj->scrolled_container), cnnobj->viewport);
g_object_unref(cnnobj->viewport);
}
-
-
- /* Destroy old scrolled_container. Not really needed, it will be destroyed
- * when removing the page from the notepad */
- gtk_box_remove(GTK_BOX(frompage), old_scrolled_container);
-
}
/* Remove all the pages from source notebook */
@@ -1847,7 +1843,7 @@ static void rcw_create_action_names(char *name, char *str, const char *label, ch
}
ptr++;
}
- if (strcmp(group, "")){
+ if (strcmp(group, "") == 0){
strcat(str, name);
}
else{
@@ -3608,7 +3604,6 @@ static gboolean rcw_map_event_fullscreen(GtkWidget *widget, gpointer data)
TRACE_CALL(__func__);
RemminaConnectionObject *cnnobj;
RemminaConnectionWindow* cnnwin = (RemminaConnectionWindow*)data;
- gint target_monitor;
REMMINA_DEBUG("Mapping: %s", gtk_widget_get_name(GTK_WIDGET(cnnwin)));
@@ -3637,18 +3632,21 @@ static gboolean rcw_map_event_fullscreen(GtkWidget *widget, gpointer data)
REMMINA_DEBUG("Fullscreen on one monitor");
}
- target_monitor = cnnwin->priv->active_monitor;
- if (target_monitor == FULL_SCREEN_TARGET_MONITOR_ZERO){
- target_monitor = FULL_SCREEN_TARGET_MONITOR_UNDEFINED; //TODO GTK4 handle monitors with fullscreen
- }
+
+
+ GdkDisplay* display = gtk_widget_get_display(GTK_WIDGET(cnnwin));
+ GtkNative* native = gtk_widget_get_native((GTK_WIDGET(cnnwin)));
+ GdkSurface* surface = gtk_native_get_surface(native);
+ GdkMonitor* monitor = gdk_display_get_monitor_at_surface(display, surface);
#if GTK_CHECK_VERSION(3, 18, 0)
if (remmina_pref.fullscreen_on_auto) {
- if (target_monitor == FULL_SCREEN_TARGET_MONITOR_UNDEFINED)
+ if (cnnwin->priv->active_monitor == NULL){
gtk_window_fullscreen(GTK_WINDOW(cnnwin));
- else
- gtk_window_fullscreen_on_monitor(GTK_WINDOW(cnnwin),
- target_monitor);
+ }
+ else{
+ gtk_window_fullscreen_on_monitor(GTK_WINDOW(cnnwin), cnnwin->priv->active_monitor);
+ }
} else {
REMMINA_DEBUG("Fullscreen managed by WM or by the user, as per settings");
gtk_window_fullscreen(GTK_WINDOW(cnnwin));
@@ -3697,7 +3695,7 @@ void rcw_property_notification_check(GObject* self, GParamSpec* pspec, gpointer
static RemminaConnectionWindow *
-rcw_new(gboolean fullscreen, int full_screen_target_monitor)
+rcw_new(gboolean fullscreen, GdkMonitor* full_screen_target_monitor)
{
TRACE_CALL(__func__);
RemminaConnectionWindow *cnnwin;
@@ -4076,7 +4074,7 @@ static RemminaConnectionWindow *rcw_create_scrolled(gint width, gint height, gbo
GtkNotebook *notebook;
GtkSettings *settings = gtk_settings_get_default();
- cnnwin = rcw_new(FALSE, 0);
+ cnnwin = rcw_new(FALSE, NULL);
gtk_widget_realize(GTK_WIDGET(cnnwin));
g_signal_connect(gtk_native_get_surface(GTK_NATIVE(cnnwin)), "notify", G_CALLBACK(rcw_property_notification_check), NULL);
@@ -4312,19 +4310,10 @@ RemminaConnectionWindow *rcw_create_fullscreen(GtkWindow *old, gint view_mode)
full_screen_target_monitor = FULL_SCREEN_TARGET_MONITOR_UNDEFINED;
if (old) {
#if GTK_CHECK_VERSION(3, 22, 0)
- // GtkNative* native = gtk_widget_get_native((GTK_WIDGET(cnnwin)));
- // GdkSurface *window = gtk_native_get_surface(native);
old_window = gtk_native_get_surface(gtk_widget_get_native(GTK_WIDGET(old)));
- old_display = gdk_surface_get_display(old_window);
+ old_display = gtk_widget_get_display(GTK_WIDGET(old));
old_monitor = gdk_display_get_monitor_at_surface(old_display, old_window);
- GListModel* list = gdk_display_get_monitors(old_display);
- n_monitors = g_list_model_get_n_items(list);// ); gdk_display_get_n_monitors(old_display);
- for (i = 0; i < n_monitors; ++i) {
- if (g_list_model_get_item(list, i) == old_monitor) {
- full_screen_target_monitor = i;
- break;
- }
- }
+
#else
GtkNative* native = gtk_widget_get_native((GTK_WIDGET(cnnwin)));
GdkSurface *window = gtk_native_get_surface(native);
@@ -4336,7 +4325,7 @@ RemminaConnectionWindow *rcw_create_fullscreen(GtkWindow *old, gint view_mode)
if (full_screen_target_monitor == 0){
full_screen_target_monitor = FULL_SCREEN_TARGET_MONITOR_ZERO;
}
- cnnwin = rcw_new(TRUE, full_screen_target_monitor);
+ cnnwin = rcw_new(TRUE, old_monitor);
gtk_widget_set_name(GTK_WIDGET(cnnwin), "remmina-connection-window-fullscreen");
gtk_widget_realize(GTK_WIDGET(cnnwin));
g_signal_connect(G_OBJECT(gtk_native_get_surface(GTK_NATIVE(cnnwin))), "notify", G_CALLBACK(rcw_property_notification_check), cnnwin);
diff --git a/src/remmina_message_panel.h b/src/remmina_message_panel.h
index b6597029f..2b858794e 100644
--- a/src/remmina_message_panel.h
+++ b/src/remmina_message_panel.h
@@ -44,7 +44,7 @@ G_BEGIN_DECLS
G_DECLARE_DERIVABLE_TYPE(RemminaMessagePanel, remmina_message_panel, REMMINA, MESSAGE_PANEL, GtkBox)
struct _RemminaMessagePanelClass {
- GtkWidgetClass parent_class;
+ GtkBoxClass parent_class;
void (*response) (RemminaMessagePanel *mp, gint response_id);
};
diff --git a/src/remmina_plugin_native.c b/src/remmina_plugin_native.c
index c1a5bea91..e2532523a 100644
--- a/src/remmina_plugin_native.c
+++ b/src/remmina_plugin_native.c
@@ -65,7 +65,7 @@ gboolean remmina_plugin_native_load(RemminaPluginService* service, const char* n
//Python plugins cannot be lazy loaded, so hande their loading seperately
if (strstr(name, "remmina-plugin-python_wrapper") != NULL ){
- module = g_module_open(name, 0);
+ module = g_module_open(name, G_MODULE_BIND_LAZY | G_MODULE_BIND_LOCAL);
}
else{
module = g_module_open(name, G_MODULE_BIND_LAZY | G_MODULE_BIND_LOCAL);
diff --git a/src/remmina_scrolled_viewport.h b/src/remmina_scrolled_viewport.h
index b25693e8b..1388914db 100644
--- a/src/remmina_scrolled_viewport.h
+++ b/src/remmina_scrolled_viewport.h
@@ -60,7 +60,7 @@ typedef struct _RemminaScrolledViewport {
} RemminaScrolledViewport;
typedef struct _RemminaScrolledViewportClass {
- GtkWidgetClass parent_class;
+ GtkBoxClass parent_class;
} RemminaScrolledViewportClass;
GType remmina_scrolled_viewport_get_type(void)