Revision: 45450
http://sourceforge.net/p/vice-emu/code/45450
Author: compyx
Date: 2025-01-05 09:23:13 +0000 (Sun, 05 Jan 2025)
Log Message:
-----------
Gtk3: add option to start with maximized window (-maximized)
Add resource "StartMaximized" and command line options `-maximized`/`+maximized`
to start the emulator window maximized. The setting can be changed in the
settings dialog: Display => Host Display.
Implementation for the SDL UI will follow soon.
Modified Paths:
--------------
trunk/vice/doc/vice.texi
trunk/vice/src/arch/gtk3/ui.c
trunk/vice/src/arch/gtk3/widgets/settings_host_display.c
Modified: trunk/vice/doc/vice.texi
===================================================================
--- trunk/vice/doc/vice.texi 2025-01-04 17:55:33 UTC (rev 45449)
+++ trunk/vice/doc/vice.texi 2025-01-05 09:23:13 UTC (rev 45450)
@@ -17629,6 +17629,12 @@
Start/Do not start with minimized window
(@code{StartMinimized=1}, @code{StartMinimized=0}).
+@findex -maximized, +maximized
+@item -maximized
+@itemx +maximized
+Start/Do not start with maximized window
+(@code{StartMaximized=1}, @code{StartMaximized=0}).
+
@findex -jamaction
@item -jamaction <Type>
Specify the action to take when the CPU encounters a 'JAM' opcode
@@ -17730,6 +17736,10 @@
@item StartMinimized
Boolean specifying whether the emulator should start minimized
+@vindex StartMaximized
+@item StartMaximized
+Boolean specifying whether the emulator should start maximized
+
@vindex JAMAction
@item JAMAction
Integer specifying the action to take when the CPU encounters a 'JAM' opcode.
Modified: trunk/vice/src/arch/gtk3/ui.c
===================================================================
--- trunk/vice/src/arch/gtk3/ui.c 2025-01-04 17:55:33 UTC (rev 45449)
+++ trunk/vice/src/arch/gtk3/ui.c 2025-01-05 09:23:13 UTC (rev 45450)
@@ -155,7 +155,8 @@
static int set_window_width(gint width, void *window_index);
static int set_window_xpos(gint xpos, void *window_index);
static int set_window_ypos(gint ypos, void *window_index);
-static int set_start_minimized(gboolean start_minimized, void *unused);
+static int set_start_minimized(int start_minimized, void *unused);
+static int set_start_maximized(int start_minimized, void *unused);
static int set_native_monitor(gboolean use_native_monitorl, void *unused);
static int set_monitor_font(const gchar *font_description, void *unused);
static int set_monitor_bg(const gchar *color, void *unused);
@@ -198,6 +199,7 @@
int pause_on_settings; /**< PauseOnSettings (bool) */
int start_minimized; /**< StartMinimized (bool) */
+ int start_maximized; /**< StartMaximized (bool) */
int use_native_monitor; /**< NativeMonitor (bool) */
@@ -285,6 +287,8 @@
{ "StartMinimized", 0, RES_EVENT_NO, NULL,
&ui_resources.start_minimized, set_start_minimized, NULL },
+ { "StartMaximized", 0, RES_EVENT_NO, NULL,
+ &ui_resources.start_maximized, set_start_maximized, NULL },
{ "NativeMonitor", 0, RES_EVENT_NO, NULL,
&ui_resources.use_native_monitor, set_native_monitor, NULL },
@@ -392,6 +396,12 @@
{ "+minimized", SET_RESOURCE, CMDLINE_ATTRIB_NONE,
NULL, NULL, "StartMinimized", (void *)0,
NULL, "Do not start VICE minimized" },
+ { "-maximized", SET_RESOURCE, CMDLINE_ATTRIB_NONE,
+ NULL, NULL, "StartMaximized", (void*)1,
+ NULL, "Start VICE maximized" },
+ { "+maximized", SET_RESOURCE, CMDLINE_ATTRIB_NONE,
+ NULL, NULL, "StartMaximized", (void*)0,
+ NULL, "Do not start VICE maximized" },
{ "-nativemonitor", SET_RESOURCE, CMDLINE_ATTRIB_NONE,
NULL, NULL, "NativeMonitor", (void *)1,
NULL, "Use native monitor on OS terminal" },
@@ -569,14 +579,37 @@
* \param[in] start_minimized start the emulator window minimized
* \param[in] unused extra param (ignored)
*
- * \return 0
+ * \return 0 on success, -1 when StartMaximized is true
*/
-static int set_start_minimized(gboolean start_minimized, void *unused)
+static int set_start_minimized(int start_minimized, void *unused)
{
+ if (start_minimized && ui_resources.start_maximized) {
+ log_error(LOG_DEFAULT,
+ "cannot request both minimized and maximized window.");
+ return -1;
+ }
ui_resources.start_minimized = start_minimized;
return 0;
}
+/** \brief Set StartMaximized resource
+ *
+ * \param[in] start_maximized start the emulator window maximized
+ * \param[in] unused extra param (ignored)
+ *
+ * \return 0 on success, -1 when StartMinimized is true
+ */
+static int set_start_maximized(int start_maximized, void *unused)
+{
+ if (start_maximized && ui_resources.start_minimized) {
+ log_error(LOG_DEFAULT,
+ "cannot request both minimized and maximized window.");
+ return -1;
+ }
+ ui_resources.start_maximized = start_maximized;
+ return 0;
+}
+
/** \brief Set NativeMonitor resource (bool)
*
* Use the spawning shell for the monitor instead of the VTE widget.
@@ -1780,7 +1813,6 @@
GdkPixbuf *icon;
gchar title[256];
- int minimized = 0;
bool restored = false;
if (machine_class != VICE_MACHINE_VSID) {
@@ -1939,18 +1971,16 @@
}
/*
- * Do we start minimized?
+ * Do we start minimized or maximized?
*/
- if (resources_get_int("StartMinimized", &minimized) < 0) {
- minimized = 0; /* fallback : not minimized */
- }
- if (minimized) {
- /* there's no gtk_window_minimize() so we do this:
- * (there is a gtk_window_maximize(), so for API consistency I'd would
- * probably have added gtk_window_minimize() to mirror the maximize
- * function)
- */
+ if (ui_resources.start_minimized && ui_resources.start_maximized) {
+ /* error: cannot have both: log and ignore */
+ log_error(LOG_DEFAULT, "minimized and maximized window requested, ignoring.");
+ } else if (ui_resources.start_minimized) {
+ /* there's no gtk_window_minimize() so we do this */
gtk_window_iconify(GTK_WINDOW(new_window));
+ } else if (ui_resources.start_maximized) {
+ gtk_window_maximize(GTK_WINDOW(new_window));
} else {
/* my guess is a minimized/iconified window cannot be fullscreen */
if (ui_is_fullscreen_from_canvas(canvas)) {
Modified: trunk/vice/src/arch/gtk3/widgets/settings_host_display.c
===================================================================
--- trunk/vice/src/arch/gtk3/widgets/settings_host_display.c 2025-01-04 17:55:33 UTC (rev 45449)
+++ trunk/vice/src/arch/gtk3/widgets/settings_host_display.c 2025-01-05 09:23:13 UTC (rev 45450)
@@ -7,6 +7,7 @@
/*
* $VICERES FullscreenDecorations -vsid
* $VICERES StartMinimized -vsid
+ * $VICERES StartMaximized -vsid
*/
/*
@@ -121,7 +122,22 @@
return grid;
}
+/** \brief Handler for the 'toggled' event of the minimized/maximized check buttons
+ *
+ * Prevent user from enabling both "start minimized" and "start maximized".
+ *
+ * \param[in] self check button triggering event
+ * \param[in] other check button for opposite state
+ */
+static void on_minmax_toggled(GtkToggleButton *self, gpointer other)
+{
+ if (gtk_toggle_button_get_active(self) &&
+ gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(other))) {
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(other), FALSE);
+ }
+}
+
/** \brief Create host display settings widget
*
* \param[in] widget parent widget (used for dialogs)
@@ -138,6 +154,7 @@
GtkWidget *decorations;
GtkWidget *minimized;
+ GtkWidget *maximized;
GtkWidget *rendering_options;
GtkWidget *rendering_options_vdc = NULL;
const char *chip;
@@ -147,6 +164,9 @@
minimized = vice_gtk3_resource_check_button_new(
"StartMinimized",
"Start the emulator window minimized");
+ maximized = vice_gtk3_resource_check_button_new(
+ "StartMaximized",
+ "Start the emulator window maximized");
rendering_options = create_rendering_options_widget(chip);
gtk_widget_set_margin_top(rendering_options, 24);
if (machine_class == VICE_MACHINE_C128) {
@@ -154,11 +174,21 @@
gtk_widget_set_margin_top(rendering_options_vdc, 24);
}
+ g_signal_connect(G_OBJECT(minimized),
+ "toggled",
+ G_CALLBACK(on_minmax_toggled),
+ (gpointer)maximized);
+ g_signal_connect(G_OBJECT(maximized),
+ "toggled",
+ G_CALLBACK(on_minmax_toggled),
+ (gpointer)minimized);
+
gtk_grid_attach(GTK_GRID(grid), decorations, 0, 1, 1, 1);
gtk_grid_attach(GTK_GRID(grid), minimized, 0, 2, 1, 1);
- gtk_grid_attach(GTK_GRID(grid), rendering_options, 0, 3, 1, 1);
+ gtk_grid_attach(GTK_GRID(grid), maximized, 0, 3, 1, 1);
+ gtk_grid_attach(GTK_GRID(grid), rendering_options, 0, 4, 1, 1);
if (machine_class == VICE_MACHINE_C128) {
- gtk_grid_attach(GTK_GRID(grid), rendering_options_vdc, 0, 4, 1, 1);
+ gtk_grid_attach(GTK_GRID(grid), rendering_options_vdc, 0, 5, 1, 1);
}
}
gtk_widget_show_all(grid);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|