Build fixes for GTK+4

This commit is contained in:
Paul Cornett
2017-12-16 11:29:57 -08:00
parent 5e27ff410c
commit 63634be74b
2 changed files with 70 additions and 1 deletions

View File

@@ -402,7 +402,11 @@ static void fg(GtkStyleContext* sc, wxColour& color, int state = GTK_STATE_FLAG_
{ {
GdkRGBA rgba; GdkRGBA rgba;
gtk_style_context_set_state(sc, GtkStateFlags(state)); gtk_style_context_set_state(sc, GtkStateFlags(state));
#ifdef __WXGTK4__
gtk_style_context_get_color(sc, &rgba);
#else
gtk_style_context_get_color(sc, GtkStateFlags(state), &rgba); gtk_style_context_get_color(sc, GtkStateFlags(state), &rgba);
#endif
color = wxColour(rgba); color = wxColour(rgba);
StyleContextFree(sc); StyleContextFree(sc);
} }
@@ -517,6 +521,9 @@ wxColour wxSystemSettingsNative::GetColour(wxSystemColour index)
break; break;
case wxSYS_COLOUR_HOTLIGHT: case wxSYS_COLOUR_HOTLIGHT:
sc = StyleContext(path, GTK_TYPE_LINK_BUTTON, "button", "link"); sc = StyleContext(path, GTK_TYPE_LINK_BUTTON, "button", "link");
#ifdef __WXGTK4__
fg(sc, color, GTK_STATE_FLAG_LINK);
#else
if (gtk_check_version(3,12,0) == NULL) if (gtk_check_version(3,12,0) == NULL)
fg(sc, color, GTK_STATE_FLAG_LINK); fg(sc, color, GTK_STATE_FLAG_LINK);
else else
@@ -534,6 +541,7 @@ wxColour wxSystemSettingsNative::GetColour(wxSystemColour index)
StyleContextFree(sc); StyleContextFree(sc);
wxGCC_WARNING_RESTORE() wxGCC_WARNING_RESTORE()
} }
#endif
break; break;
case wxSYS_COLOUR_INFOBK: case wxSYS_COLOUR_INFOBK:
sc = TooltipContext(path); sc = TooltipContext(path);
@@ -830,6 +838,20 @@ static int GetBorderWidth(wxSystemMetric index, wxWindow* win)
return -1; return -1;
} }
#ifdef __WXGTK4__
static GdkRectangle GetMonitorGeom(GdkWindow* window)
{
GdkMonitor* monitor;
if (window)
monitor = gdk_display_get_monitor_at_window(gdk_window_get_display(window), window);
else
monitor = gdk_display_get_primary_monitor(gdk_display_get_default());
GdkRectangle rect;
gdk_monitor_get_geometry(monitor, &rect);
return rect;
}
#endif
int wxSystemSettingsNative::GetMetric( wxSystemMetric index, wxWindow* win ) int wxSystemSettingsNative::GetMetric( wxSystemMetric index, wxWindow* win )
{ {
GdkWindow *window = NULL; GdkWindow *window = NULL;
@@ -961,16 +983,28 @@ int wxSystemSettingsNative::GetMetric( wxSystemMetric index, wxWindow* win )
return 32; return 32;
case wxSYS_SCREEN_X: case wxSYS_SCREEN_X:
#ifdef __WXGTK4__
return GetMonitorGeom(window).width;
#else
wxGCC_WARNING_SUPPRESS(deprecated-declarations)
if (window) if (window)
return gdk_screen_get_width(gdk_window_get_screen(window)); return gdk_screen_get_width(gdk_window_get_screen(window));
else else
return gdk_screen_width(); return gdk_screen_width();
wxGCC_WARNING_RESTORE()
#endif
case wxSYS_SCREEN_Y: case wxSYS_SCREEN_Y:
#ifdef __WXGTK4__
return GetMonitorGeom(window).height;
#else
wxGCC_WARNING_SUPPRESS(deprecated-declarations)
if (window) if (window)
return gdk_screen_get_height(gdk_window_get_screen(window)); return gdk_screen_get_height(gdk_window_get_screen(window));
else else
return gdk_screen_height(); return gdk_screen_height();
wxGCC_WARNING_RESTORE()
#endif
case wxSYS_HSCROLL_Y: case wxSYS_HSCROLL_Y:
case wxSYS_VSCROLL_X: case wxSYS_VSCROLL_X:

View File

@@ -80,14 +80,32 @@ void *wxGetDisplay()
void wxDisplaySize( int *width, int *height ) void wxDisplaySize( int *width, int *height )
{ {
#ifdef __WXGTK4__
GdkMonitor* monitor = gdk_display_get_primary_monitor(gdk_display_get_default());
GdkRectangle rect;
gdk_monitor_get_geometry(monitor, &rect);
if (width) *width = rect.width;
if (height) *height = rect.height;
#else
wxGCC_WARNING_SUPPRESS(deprecated-declarations)
if (width) *width = gdk_screen_width(); if (width) *width = gdk_screen_width();
if (height) *height = gdk_screen_height(); if (height) *height = gdk_screen_height();
wxGCC_WARNING_RESTORE()
#endif
} }
void wxDisplaySizeMM( int *width, int *height ) void wxDisplaySizeMM( int *width, int *height )
{ {
#ifdef __WXGTK4__
GdkMonitor* monitor = gdk_display_get_primary_monitor(gdk_display_get_default());
if (width) *width = gdk_monitor_get_width_mm(monitor);
if (height) *height = gdk_monitor_get_height_mm(monitor);
#else
wxGCC_WARNING_SUPPRESS(deprecated-declarations)
if (width) *width = gdk_screen_width_mm(); if (width) *width = gdk_screen_width_mm();
if (height) *height = gdk_screen_height_mm(); if (height) *height = gdk_screen_height_mm();
wxGCC_WARNING_RESTORE()
#endif
} }
bool wxColourDisplay() bool wxColourDisplay()
@@ -97,7 +115,11 @@ bool wxColourDisplay()
int wxDisplayDepth() int wxDisplayDepth()
{ {
#ifdef __WXGTK4__
return 24;
#else
return gdk_visual_get_depth(gdk_window_get_visual(wxGetTopLevelGDK())); return gdk_visual_get_depth(gdk_window_get_visual(wxGetTopLevelGDK()));
#endif
} }
wxWindow* wxFindWindowAtPoint(const wxPoint& pt) wxWindow* wxFindWindowAtPoint(const wxPoint& pt)
@@ -187,12 +209,21 @@ wxPortId wxGUIAppTraits::GetToolkitVersion(int *verMaj,
int *verMin, int *verMin,
int *verMicro) const int *verMicro) const
{ {
#ifdef __WXGTK3__
if (verMaj)
*verMaj = gtk_get_major_version();
if (verMin)
*verMin = gtk_get_minor_version();
if (verMicro)
*verMicro = gtk_get_micro_version();
#else
if ( verMaj ) if ( verMaj )
*verMaj = gtk_major_version; *verMaj = gtk_major_version;
if ( verMin ) if ( verMin )
*verMin = gtk_minor_version; *verMin = gtk_minor_version;
if ( verMicro ) if ( verMicro )
*verMicro = gtk_micro_version; *verMicro = gtk_micro_version;
#endif
return wxPORT_GTK; return wxPORT_GTK;
} }
@@ -339,10 +370,14 @@ bool wxGUIAppTraits::ShowAssertDialog(const wxString& msg)
gtk_assert_dialog_set_message(GTK_ASSERT_DIALOG(dialog), msg.mb_str()); gtk_assert_dialog_set_message(GTK_ASSERT_DIALOG(dialog), msg.mb_str());
GdkDisplay* display = gtk_widget_get_display(dialog); GdkDisplay* display = gtk_widget_get_display(dialog);
#ifdef __WXGTK3__ #ifdef __WXGTK4__
gdk_seat_ungrab(gdk_display_get_default_seat(display));
#elif defined(__WXGTK3__)
wxGCC_WARNING_SUPPRESS(deprecated-declarations)
GdkDeviceManager* manager = gdk_display_get_device_manager(display); GdkDeviceManager* manager = gdk_display_get_device_manager(display);
GdkDevice* device = gdk_device_manager_get_client_pointer(manager); GdkDevice* device = gdk_device_manager_get_client_pointer(manager);
gdk_device_ungrab(device, unsigned(GDK_CURRENT_TIME)); gdk_device_ungrab(device, unsigned(GDK_CURRENT_TIME));
wxGCC_WARNING_RESTORE()
#else #else
gdk_display_pointer_ungrab(display, unsigned(GDK_CURRENT_TIME)); gdk_display_pointer_ungrab(display, unsigned(GDK_CURRENT_TIME));
#endif #endif