< 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 >