Bugfix/linux warnings (#1656)

* Use scaling when setting min/max window

* Fix compile issue. Add debug

* Fix scaling issue

* Fix window widget warnings & shutdown issue. Remove debug lines for linux

* Update dev build with shutdown fix
This commit is contained in:
Lea Anthony
2022-08-03 21:17:38 +10:00
committed by GitHub
parent 42ef125fb4
commit baff28bb20
3 changed files with 31 additions and 10 deletions
+3 -4
View File
@@ -45,15 +45,14 @@ type App struct {
} }
func (a *App) Shutdown() { func (a *App) Shutdown() {
if a.shutdownCallback != nil {
a.shutdownCallback(a.ctx)
}
a.frontend.Quit() a.frontend.Quit()
} }
func (a *App) Run() error { func (a *App) Run() error {
err := a.frontend.Run(a.ctx) err := a.frontend.Run(a.ctx)
a.Shutdown() if a.shutdownCallback != nil {
a.shutdownCallback(a.ctx)
}
return err return err
} }
+3 -4
View File
@@ -34,15 +34,14 @@ type App struct {
} }
func (a *App) Shutdown() { func (a *App) Shutdown() {
if a.shutdownCallback != nil {
a.shutdownCallback(a.ctx)
}
a.frontend.Quit() a.frontend.Quit()
} }
func (a *App) Run() error { func (a *App) Run() error {
err := a.frontend.Run(a.ctx) err := a.frontend.Run(a.ctx)
a.Shutdown() if a.shutdownCallback != nil {
a.shutdownCallback(a.ctx)
}
return err return err
} }
+25 -2
View File
@@ -38,16 +38,27 @@ GdkMonitor* getCurrentMonitor(GtkWindow *window) {
// Get the monitor that the window is currently on // Get the monitor that the window is currently on
GdkDisplay *display = gtk_widget_get_display(GTK_WIDGET(window)); GdkDisplay *display = gtk_widget_get_display(GTK_WIDGET(window));
GdkWindow *gdk_window = gtk_widget_get_window(GTK_WIDGET(window)); GdkWindow *gdk_window = gtk_widget_get_window(GTK_WIDGET(window));
if( gdk_window == NULL ) {
return NULL;
}
GdkMonitor *monitor = gdk_display_get_monitor_at_window(display, gdk_window); GdkMonitor *monitor = gdk_display_get_monitor_at_window(display, gdk_window);
return GDK_MONITOR(monitor); return GDK_MONITOR(monitor);
} }
bool isNULLRectangle(GdkRectangle input) {
return input.x == -1 && input.y == -1 && input.width == -1 && input.height == -1;
}
GdkRectangle getCurrentMonitorGeometry(GtkWindow *window) { GdkRectangle getCurrentMonitorGeometry(GtkWindow *window) {
GdkMonitor *monitor = getCurrentMonitor(window); GdkMonitor *monitor = getCurrentMonitor(window);
GdkRectangle result;
if( monitor == NULL ) {
result.x = result.y = result.height = result.width = -1;
return result;
}
// Get the geometry of the monitor // Get the geometry of the monitor
GdkRectangle result;
gdk_monitor_get_geometry (monitor,&result); gdk_monitor_get_geometry (monitor,&result);
return result; return result;
} }
@@ -63,7 +74,10 @@ static void SetMinMaxSize(GtkWindow* window, int min_width, int min_height, int
size.min_width = size.min_height = size.max_width = size.max_height = 0; size.min_width = size.min_height = size.max_width = size.max_height = 0;
GdkRectangle monitorSize = getCurrentMonitorGeometry(window); GdkRectangle monitorSize = getCurrentMonitorGeometry(window);
int flags = GDK_HINT_MAX_SIZE | GDK_HINT_MIN_SIZE; if( isNULLRectangle(monitorSize) ) {
return;
}
int flags = GDK_HINT_MAX_SIZE | GDK_HINT_MIN_SIZE;
size.max_height = (max_height == 0 ? monitorSize.height : max_height); size.max_height = (max_height == 0 ? monitorSize.height : max_height);
size.max_width = (max_width == 0 ? monitorSize.width : max_width); size.max_width = (max_width == 0 ? monitorSize.width : max_width);
size.min_height = min_height; size.min_height = min_height;
@@ -76,6 +90,9 @@ gboolean Center(gpointer data) {
// Get the geometry of the monitor // Get the geometry of the monitor
GdkRectangle m = getCurrentMonitorGeometry(window); GdkRectangle m = getCurrentMonitorGeometry(window);
if( isNULLRectangle(m) ) {
return G_SOURCE_REMOVE;
}
// Get the window width/height // Get the window width/height
int windowWidth, windowHeight; int windowWidth, windowHeight;
@@ -478,6 +495,9 @@ gboolean setPosition(gpointer data) {
void SetPosition(void* window, int x, int y) { void SetPosition(void* window, int x, int y) {
GdkRectangle monitorDimensions = getCurrentMonitorGeometry(window); GdkRectangle monitorDimensions = getCurrentMonitorGeometry(window);
if( isNULLRectangle(monitorDimensions) ) {
return;
}
SetPositionArgs* args = malloc(sizeof(SetPositionArgs)); SetPositionArgs* args = malloc(sizeof(SetPositionArgs));
args->window = window; args->window = window;
args->x = monitorDimensions.x + x; args->x = monitorDimensions.x + x;
@@ -526,6 +546,9 @@ gboolean Fullscreen(gpointer data) {
// Get the geometry of the monitor. // Get the geometry of the monitor.
GdkRectangle m = getCurrentMonitorGeometry(window); GdkRectangle m = getCurrentMonitorGeometry(window);
if( isNULLRectangle(m) ) {
return G_SOURCE_REMOVE;
}
int scale = getCurrentMonitorScaleFactor(window); int scale = getCurrentMonitorScaleFactor(window);
SetMinMaxSize(window, 0, 0, m.width * scale, m.height * scale); SetMinMaxSize(window, 0, 0, m.width * scale, m.height * scale);