< prev index next >

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

Print this page




 663     }
 664 
 665     gtk_widget_destroy(gtk_widget);
 666 }
 667 
 668 ////////////////////////////// WindowContextTop /////////////////////////////////
 669 
 670 
 671 WindowContextTop::WindowContextTop(jobject _jwindow, WindowContext* _owner, long _screen,
 672         WindowFrameType _frame_type, WindowType type, GdkWMFunction wmf) :
 673             WindowContextBase(),
 674             screen(_screen),
 675             frame_type(_frame_type),
 676             owner(_owner),
 677             geometry(),
 678             resizable(),
 679             frame_extents_initialized(),
 680             map_received(false),
 681             location_assigned(false),
 682             size_assigned(false),
 683             on_top(false)

 684 {
 685     jwindow = mainEnv->NewGlobalRef(_jwindow);
 686 
 687     gtk_widget =  gtk_window_new(type == POPUP ? GTK_WINDOW_POPUP : GTK_WINDOW_TOPLEVEL);
 688 
 689     if (gchar* app_name = get_application_name()) {
 690         gtk_window_set_wmclass(GTK_WINDOW(gtk_widget), app_name, app_name);
 691         g_free(app_name);
 692     }
 693 
 694     if (owner) {
 695         owner->add_child(this);
 696         if (on_top_inherited()) {
 697             gtk_window_set_keep_above(GTK_WINDOW(gtk_widget), TRUE);
 698         }
 699     }
 700 
 701     if (type == UTILITY) {
 702         gtk_window_set_type_hint(GTK_WINDOW(gtk_widget), GDK_WINDOW_TYPE_HINT_UTILITY);
 703     }


 965         gdk_window_get_geometry(gdk_window, NULL, NULL, &w, &h, NULL);
 966 #endif
 967         x = frame.x;
 968         y = frame.y;
 969         geometry.current_width = frame.width;
 970         geometry.current_height = frame.height;
 971 
 972         top = contentY - frame.y;
 973         left = contentX - frame.x;
 974         bottom = frame.y + frame.height - (contentY + h);
 975         right = frame.x + frame.width - (contentX + w);
 976         if (geometry.extents.top != top
 977                 || geometry.extents.left != left
 978                 || geometry.extents.bottom != bottom
 979                 || geometry.extents.right != right) {
 980             updateWindowConstraints = true;
 981             geometry.extents.top = top;
 982             geometry.extents.left = left;
 983             geometry.extents.bottom = bottom;
 984             geometry.extents.right = right;







 985         }
 986     } else {
 987         x = event->x;
 988         y = event->y;
 989         w = event->width;
 990         h = event->height;
 991     }
 992 
 993     if (size_assigned && w <= 1 && h <= 1 && (geometry.final_width.value > 1 ||
 994                                              geometry.final_height.value > 1)) {
 995         // skip artifact
 996         return;
 997     }
 998 
 999     geometry.final_width.value = w;
1000     geometry.final_width.type = BOUNDSTYPE_CONTENT;
1001     geometry.final_height.value = h;
1002     geometry.final_height.type = BOUNDSTYPE_CONTENT;
1003     geometry_set_window_x(&geometry, x);
1004     geometry_set_window_y(&geometry, y);


1092     } else {
1093         //Since window is not ready yet set only request for change of resizable.
1094         resizable.request  = res ? REQUEST_RESIZABLE : REQUEST_NOT_RESIZABLE;
1095     }
1096 }
1097 
1098 void WindowContextTop::set_visible(bool visible)
1099 {
1100     if (visible) {
1101         if (!size_assigned) {
1102             set_bounds(0, 0, false, false, 320, 200, -1, -1);
1103         }
1104         if (!location_assigned) {
1105             set_bounds(0, 0, true, true, -1, -1, -1, -1);
1106         }
1107     }
1108     WindowContextBase::set_visible(visible);
1109 }
1110 
1111 void WindowContextTop::set_bounds(int x, int y, bool xSet, bool ySet, int w, int h, int cw, int ch) {





1112     if (!frame_extents_initialized && frame_type == TITLED) {
1113         initialize_frame_extents();

1114         frame_extents_initialized = true;
1115     }

1116 
1117     XWindowChanges windowChanges;
1118     unsigned int windowChangesMask = 0;
1119     if (w > 0) {
1120         geometry.final_width.value = w;
1121         geometry.final_width.type = BOUNDSTYPE_WINDOW;
1122         geometry.current_width = geometry_get_window_width(&geometry);
1123         windowChanges.width = geometry_get_content_width(&geometry);
1124         windowChangesMask |= CWWidth;
1125     } else if (cw > 0) {
1126         geometry.final_width.value = cw;
1127         geometry.final_width.type = BOUNDSTYPE_CONTENT;
1128         geometry.current_width = geometry_get_window_width(&geometry);
1129         windowChanges.width = geometry_get_content_width(&geometry);
1130         windowChangesMask |= CWWidth;
1131     }
1132 
1133     if (h > 0) {
1134         geometry.final_height.value = h;
1135         geometry.final_height.type = BOUNDSTYPE_WINDOW;




 663     }
 664 
 665     gtk_widget_destroy(gtk_widget);
 666 }
 667 
 668 ////////////////////////////// WindowContextTop /////////////////////////////////
 669 
 670 
 671 WindowContextTop::WindowContextTop(jobject _jwindow, WindowContext* _owner, long _screen,
 672         WindowFrameType _frame_type, WindowType type, GdkWMFunction wmf) :
 673             WindowContextBase(),
 674             screen(_screen),
 675             frame_type(_frame_type),
 676             owner(_owner),
 677             geometry(),
 678             resizable(),
 679             frame_extents_initialized(),
 680             map_received(false),
 681             location_assigned(false),
 682             size_assigned(false),
 683             on_top(false),
 684             requested_bounds()
 685 {
 686     jwindow = mainEnv->NewGlobalRef(_jwindow);
 687 
 688     gtk_widget =  gtk_window_new(type == POPUP ? GTK_WINDOW_POPUP : GTK_WINDOW_TOPLEVEL);
 689 
 690     if (gchar* app_name = get_application_name()) {
 691         gtk_window_set_wmclass(GTK_WINDOW(gtk_widget), app_name, app_name);
 692         g_free(app_name);
 693     }
 694 
 695     if (owner) {
 696         owner->add_child(this);
 697         if (on_top_inherited()) {
 698             gtk_window_set_keep_above(GTK_WINDOW(gtk_widget), TRUE);
 699         }
 700     }
 701 
 702     if (type == UTILITY) {
 703         gtk_window_set_type_hint(GTK_WINDOW(gtk_widget), GDK_WINDOW_TYPE_HINT_UTILITY);
 704     }


 966         gdk_window_get_geometry(gdk_window, NULL, NULL, &w, &h, NULL);
 967 #endif
 968         x = frame.x;
 969         y = frame.y;
 970         geometry.current_width = frame.width;
 971         geometry.current_height = frame.height;
 972 
 973         top = contentY - frame.y;
 974         left = contentX - frame.x;
 975         bottom = frame.y + frame.height - (contentY + h);
 976         right = frame.x + frame.width - (contentX + w);
 977         if (geometry.extents.top != top
 978                 || geometry.extents.left != left
 979                 || geometry.extents.bottom != bottom
 980                 || geometry.extents.right != right) {
 981             updateWindowConstraints = true;
 982             geometry.extents.top = top;
 983             geometry.extents.left = left;
 984             geometry.extents.bottom = bottom;
 985             geometry.extents.right = right;
 986             if (!frame_extents_initialized && !is_null_extents()) {
 987                 set_bounds(0, 0, false, false,
 988                     requested_bounds.width, requested_bounds.height,
 989                     requested_bounds.client_width, requested_bounds.client_height
 990                 );
 991                 frame_extents_initialized = true;
 992             }
 993         }
 994     } else {
 995         x = event->x;
 996         y = event->y;
 997         w = event->width;
 998         h = event->height;
 999     }
1000 
1001     if (size_assigned && w <= 1 && h <= 1 && (geometry.final_width.value > 1 ||
1002                                              geometry.final_height.value > 1)) {
1003         // skip artifact
1004         return;
1005     }
1006 
1007     geometry.final_width.value = w;
1008     geometry.final_width.type = BOUNDSTYPE_CONTENT;
1009     geometry.final_height.value = h;
1010     geometry.final_height.type = BOUNDSTYPE_CONTENT;
1011     geometry_set_window_x(&geometry, x);
1012     geometry_set_window_y(&geometry, y);


1100     } else {
1101         //Since window is not ready yet set only request for change of resizable.
1102         resizable.request  = res ? REQUEST_RESIZABLE : REQUEST_NOT_RESIZABLE;
1103     }
1104 }
1105 
1106 void WindowContextTop::set_visible(bool visible)
1107 {
1108     if (visible) {
1109         if (!size_assigned) {
1110             set_bounds(0, 0, false, false, 320, 200, -1, -1);
1111         }
1112         if (!location_assigned) {
1113             set_bounds(0, 0, true, true, -1, -1, -1, -1);
1114         }
1115     }
1116     WindowContextBase::set_visible(visible);
1117 }
1118 
1119 void WindowContextTop::set_bounds(int x, int y, bool xSet, bool ySet, int w, int h, int cw, int ch) {
1120     requested_bounds.width = w;
1121     requested_bounds.height = h;
1122     requested_bounds.client_width = cw;
1123     requested_bounds.client_height = ch;
1124 
1125     if (!frame_extents_initialized && frame_type == TITLED) {
1126         initialize_frame_extents();
1127         if (!is_null_extents()) {
1128             frame_extents_initialized = true;
1129         }
1130     }
1131 
1132     XWindowChanges windowChanges;
1133     unsigned int windowChangesMask = 0;
1134     if (w > 0) {
1135         geometry.final_width.value = w;
1136         geometry.final_width.type = BOUNDSTYPE_WINDOW;
1137         geometry.current_width = geometry_get_window_width(&geometry);
1138         windowChanges.width = geometry_get_content_width(&geometry);
1139         windowChangesMask |= CWWidth;
1140     } else if (cw > 0) {
1141         geometry.final_width.value = cw;
1142         geometry.final_width.type = BOUNDSTYPE_CONTENT;
1143         geometry.current_width = geometry_get_window_width(&geometry);
1144         windowChanges.width = geometry_get_content_width(&geometry);
1145         windowChangesMask |= CWWidth;
1146     }
1147 
1148     if (h > 0) {
1149         geometry.final_height.value = h;
1150         geometry.final_height.type = BOUNDSTYPE_WINDOW;


< prev index next >