< prev index next >

modules/javafx.graphics/src/main/native-glass/gtk/glass_window.cpp

Print this page

        

@@ -1002,10 +1002,13 @@
     if (jview) {
         mainEnv->CallVoidMethod(jview, jViewNotifyResize,
                 event->width,
                 event->height);
         CHECK_JNI_EXCEPTION(mainEnv)
+        mainEnv->CallVoidMethod(jview, jViewNotifyView,
+                com_sun_glass_events_ViewEvent_MOVE);
+        CHECK_JNI_EXCEPTION(mainEnv)
     }
     if (jwindow) {
         mainEnv->CallVoidMethod(jwindow, jWindowNotifyResize,
                 (is_maximized)
                     ? com_sun_glass_events_WindowEvent_MAXIMIZE

@@ -1052,11 +1055,11 @@
                     : resizable.maxw - geometry.extents.left - geometry.extents.right,
             (resizable.maxh == -1) ? 100000
                     : resizable.maxh - geometry.extents.top - geometry.extents.bottom,
             0, 0, 0, 0, 0.0, 0.0, GDK_GRAVITY_NORTH_WEST
         };
-        gdk_window_set_geometry_hints(gdk_window, &geom,
+        gtk_window_set_geometry_hints(GTK_WINDOW(gtk_widget), NULL, &geom,
                 static_cast<GdkWindowHints> (GDK_HINT_MIN_SIZE | GDK_HINT_MAX_SIZE));
     }
 }
 
 void WindowContextTop::set_window_resizable(bool res) {

@@ -1065,11 +1068,11 @@
         int h = geometry_get_content_height(&geometry);
         if (w == -1 && h == -1) {
             gtk_window_get_size(GTK_WINDOW(gtk_widget), &w, &h);
         }
         GdkGeometry geom = {w, h, w, h, 0, 0, 0, 0, 0.0, 0.0, GDK_GRAVITY_NORTH_WEST};
-        gdk_window_set_geometry_hints(gdk_window, &geom,
+        gtk_window_set_geometry_hints(GTK_WINDOW(gtk_widget), NULL, &geom,
                 static_cast<GdkWindowHints>(GDK_HINT_MIN_SIZE | GDK_HINT_MAX_SIZE));
         resizable.value = false;
     } else {
         resizable.value = true;
         update_window_constraints();

@@ -1179,12 +1182,11 @@
             newX = windowChanges->x;
         }
         if (windowChangesMask & CWY) {
             newY = windowChanges->y;
         }
-
-        gdk_window_move(gdk_window, newX, newY);
+        gtk_window_move(GTK_WINDOW(gtk_widget), newX, newY);
     }
 
     if (windowChangesMask & (CWWidth | CWHeight)) {
         gint newWidth, newHeight;
         gtk_window_get_size(GTK_WINDOW(gtk_widget), &newWidth, &newHeight);

@@ -1199,13 +1201,13 @@
         if (!resizable.value) {
             GdkGeometry geom;
             GdkWindowHints hints = (GdkWindowHints)(GDK_HINT_MIN_SIZE | GDK_HINT_MAX_SIZE);
             geom.min_width = geom.max_width = newWidth;
             geom.min_height = geom.max_height = newHeight;
-            gdk_window_set_geometry_hints(gdk_window, &geom, hints);
+            gtk_window_set_geometry_hints(GTK_WINDOW(gtk_widget), NULL, &geom, hints);
         }
-        gdk_window_resize(gdk_window, newWidth, newHeight);
+        gtk_window_resize(GTK_WINDOW(gtk_widget), newWidth, newHeight);
     }
 }
 
 void WindowContextTop::applyShapeMask(void* data, uint width, uint height)
 {

@@ -1214,10 +1216,25 @@
     }
 
     glass_window_apply_shape_mask(gtk_widget_get_window(gtk_widget), data, width, height);
 }
 
+void WindowContextTop::ensure_window_size() {
+    gint w, h;
+#ifdef GLASS_GTK3
+    gdk_window_get_geometry(gdk_window, NULL, NULL, &w, &h);
+#else
+    gdk_window_get_geometry(gdk_window, NULL, NULL, &w, &h, NULL);
+#endif
+    if (size_assigned && (geometry.final_width.value != w
+                       || geometry.final_height.value != h)) {
+
+        gdk_window_resize(gdk_window, geometry.final_width.value,
+                                      geometry.final_height.value);
+    }
+}
+
 void WindowContextTop::set_minimized(bool minimize) {
     is_iconified = minimize;
     if (minimize) {
         if (frame_type == TRANSPARENT) {
             // https://bugs.launchpad.net/ubuntu/+source/unity/+bug/1245571

@@ -1237,17 +1254,19 @@
     }
 }
 void WindowContextTop::set_maximized(bool maximize) {
     is_maximized = maximize;
     if (maximize) {
+        ensure_window_size();
         gtk_window_maximize(GTK_WINDOW(gtk_widget));
     } else {
         gtk_window_unmaximize(GTK_WINDOW(gtk_widget));
     }
 }
 
 void WindowContextTop::enter_fullscreen() {
+    ensure_window_size();
     gtk_window_fullscreen(GTK_WINDOW(gtk_widget));
 }
 
 void WindowContextTop::exit_fullscreen() {
     gtk_window_unfullscreen(GTK_WINDOW(gtk_widget));
< prev index next >