gtk: implement -full-screen and -no-frame
PATCH 1/1 gtk: implement -full-screen and -no-frame
Aiming for GTK as replacement for SDL, features like -full-screen and -no-frame should also be implemented.
Bringing the window into full-screen mode is done by faking activating the full screen menu item with a NULL menu item (which currently is not used by gd_menu_full_screen). This is done after showing the windows to make the cursor and menu hidden.
--- include/ui/console.h | 2 +- ui/gtk.c | 10 +++++++++- vl.c | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-)
include/ui/console.h +1 -1
@@ -339,6 +339,6 @@ int index_from_keycode(int code);/* gtk.c */ void early_gtk_display_init (void ); -void gtk_display_init (DisplayState *ds); +void gtk_display_init (DisplayState *ds,int full_screen,int no_frame);#endif
ui/gtk.c +9 -1
@@ -1433,7 +1433,7 @@ static const DisplayChangeListenerOps dcl_ops = { .dpy_cursor_define = gd_cursor_define, }; -void gtk_display_init (DisplayState *ds) +void gtk_display_init (DisplayState *ds,int full_screen,int no_frame) {GtkDisplayState *s =g_malloc0 (sizeof (*s));char *filename;
@@ -1457,6 +1457,10 @@ void gtk_display_init(DisplayState *ds) s->scale_y =1.0 ; s->free_scale = FALSE; +if (no_frame) { +gtk_window_set_decorated (GTK_WINDOW (s->window), FALSE); + } +setlocale (LC_ALL ,"" );bindtextdomain ("qemu" ,CONFIG_QEMU_LOCALEDIR );textdomain ("qemu" );
@@ -1509,6 +1513,10 @@ void gtk_display_init(DisplayState *ds)gtk_widget_show_all (s->window); +if (full_screen) { +gd_menu_full_screen (NULL , s); + } +register_displaychangelistener (&s->dcl); global_state = s;
vl.c +1 -1
@@ -4347,7 +4347,7 @@ int main(int argc, char **argv, char **envp)#endif #if defined(CONFIG_GTK )case DT_GTK : -gtk_display_init (ds); +gtk_display_init (ds, full_screen, no_frame);break ;#endif default :
Signature · 1 line
1.8.3
Quoted 41 lines · Peter Wu
Aiming for GTK as replacement for SDL, features like -full-screen and -no-frame should also be implemented.
Bringing the window into full-screen mode is done by faking activating the full screen menu item with a NULL menu item (which currently is not used by
gd_menu_full_screen). This is done after showing the windows to make the cursor and menu hidden.Signed-off-by Peter Wu <[email protected]>--- include/ui/console.h | 2 +- ui/gtk.c | 10 +++++++++- vl.c | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-)include/ui/console.h +1
-1@@ -339,6 +339,6 @@ int index_from_keycode(int code);/* gtk.c */ void early_gtk_display_init (void ); -void gtk_display_init (DisplayState *ds); +void gtk_display_init (DisplayState *ds,int full_screen,int no_frame);#endif ui/gtk.c +1
-1@@ -1433,7 +1433,7 @@ static const DisplayChangeListenerOps dcl_ops = { .dpy_cursor_define = gd_cursor_define, }; -void gtk_display_init (DisplayState *ds) +void gtk_display_init (DisplayState *ds,int full_screen,int no_frame) {GtkDisplayState *s =g_malloc0 (sizeof (*s));char *filename;
ui/gtk.c void gtk_display_init(DisplayState *ds) · line 1463
Quoted 7 lines
ui/gtk.c +4
-0@@ -1457,6 +1457,10 @@ void gtk_display_init(DisplayState *ds) s->scale_y =1.0 ; s->free_scale = FALSE; +if (no_frame) { +gtk_window_set_decorated (GTK_WINDOW (s->window), FALSE); + } +
Is this really desirable? Why do people use -no-frame? I don't think we should carry over features from SDL just because they are there.
ui/gtk.c void gtk_display_init(DisplayState *ds) · line 1519
Quoted 11 lines
ui/gtk.c +4
-0setlocale (LC_ALL ,"" );bindtextdomain ("qemu" ,CONFIG_QEMU_LOCALEDIR );textdomain ("qemu" );@@ -1509,6 +1513,10 @@ void gtk_display_init(DisplayState *ds)gtk_widget_show_all (s->window); +if (full_screen) { +gd_menu_full_screen (NULL , s); + } +
You should activate the menu item by using gtk_check_menu_item_set_active().
Otherwise the menu with be out of sync with the UI state.
Regards,
Anthony Liguori
Quoted 21 lines
ui/gtk.c +0
-0register_displaychangelistener (&s->dcl); global_state = s;vl.c +1
-2@@ -4347,7 +4347,7 @@ int main(int argc, char **argv, char **envp)#endif #if defined(CONFIG_GTK )case DT_GTK : -gtk_display_init (ds); +gtk_display_init (ds, full_screen, no_frame);break ;#endif default : --1.8.3
Quoted 54 lines · On Sunday 09 June 2013 13:33:14 Anthony Liguori wrote:
Quoted 53 lines · Peter Wu
Aiming for GTK as replacement for SDL, features like -full-screen and -no-frame should also be implemented.
Bringing the window into full-screen mode is done by faking activating the full screen menu item with a NULL menu item (which currently is not used by
gd_menu_full_screen). This is done after showing the windows to make the cursor and menu hidden.Signed-off-by Peter Wu <[email protected]>---
include/ui/console.h | 2 +- ui/gtk.c | 10 +++++++++- vl.c | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-)include/ui/console.h +1
-1@@ -339,6 +339,6 @@ int index_from_keycode(int code);/* gtk.c */ void early_gtk_display_init (void ); -void gtk_display_init (DisplayState *ds); +void gtk_display_init (DisplayState *ds,int full_screen,int no_frame);#endif
ui/gtk.c +1
-1@@ -1433,7 +1433,7 @@ static const DisplayChangeListenerOps dcl_ops = { .dpy_cursor_define = gd_cursor_define, }; -void gtk_display_init (DisplayState *ds) +void gtk_display_init (DisplayState *ds,int full_screen,int no_frame){
GtkDisplayState *s = g_malloc0(sizeof(*s)); char *filename;ui/gtk.c +0
-0@@ -1457,6 +1457,10 @@ void gtk_display_init(DisplayState *ds) s->scale_y =1.0 ; s->free_scale = FALSE;
Quoted 7 lines
ui/gtk.c void gtk_display_init(DisplayState *ds) · line 1463
Quoted 4 lines
ui/gtk.c +4
-0+if (no_frame) { +gtk_window_set_decorated (GTK_WINDOW (s->window), FALSE); + } +Is this really desirable? Why do people use -no-frame? I don't think we should carry over features from SDL just because they are there.
I started using it because -full-screen didn't work well in SDL. In SDL, full- screen mode changes de video mode too. At some point, I even managed to crash QEMU in full screen mode with certain Xorg settings.
I just added it to GTK because it was possible to do so. In GTK, I -full- screen hides the menu bar (although there is still some pixels visible on the top!) and the border without changing modes (which is a plus!). Due to this, there is not really a need for -no-frame for me.
Others are likely using -no-frame in a space-constrained environment where they need to show multiple windows.
Quoted 8 lines
Quoted 8 lines
ui/gtk.c +0
-0setlocale (LC_ALL ,"" );bindtextdomain ("qemu" ,CONFIG_QEMU_LOCALEDIR );textdomain("qemu");ui/gtk.c +0
-0@@ -1509,6 +1513,10 @@ void gtk_display_init(DisplayState *ds)gtk_widget_show_all (s->window);
Quoted 8 lines
ui/gtk.c void gtk_display_init(DisplayState *ds) · line 1519
Quoted 4 lines
ui/gtk.c +4
-0+if (full_screen) { +gd_menu_full_screen (NULL , s); + } +You should activate the menu item by using
gtk_check_menu_item_set_active().Otherwise the menu with be out of sync with the UI state.
Alright, I forgot to check that. I will this fix in a next patch where I will leave out -no-frame as well.
Thanks for review!
Regards,
Peter
Quoted 28 lines
Regards,
Anthony Liguori
Quoted 24 lines
ui/gtk.c +0
-0register_displaychangelistener (&s->dcl); global_state = s;vl.c +1
-1@@ -4347,7 +4347,7 @@ int main(int argc, char **argv, char **envp)#endif #if defined(CONFIG_GTK )case DT_GTK : -gtk_display_init (ds); +gtk_display_init (ds, full_screen, no_frame);break;#endif
default:
--
1.8.3
Am 09.06.2013 um 12:30 hat Peter Wu geschrieben:
Quoted 20 lines
Aiming for GTK as replacement for SDL, features like -full-screen and -no-frame should also be implemented.
Bringing the window into full-screen mode is done by faking activating the full screen menu item with a NULL menu item (which currently is not used by
gd_menu_full_screen). This is done after showing the windows to make the cursor and menu hidden.Signed-off-by Peter Wu <[email protected]>--- include/ui/console.h | 2 +- ui/gtk.c | 10 +++++++++- vl.c | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-)include/ui/console.h +0
-0
include/ui/console.h int index_from_keycode(int code); · line 342
Quoted 5 lines
include/ui/console.h +1
-1@@ -339,6 +339,6 @@ int index_from_keycode(int code);/* gtk.c */ void early_gtk_display_init (void ); -void gtk_display_init (DisplayState *ds); +void gtk_display_init (DisplayState *ds,int full_screen,int no_frame);
Should the new arguments be bool?
Kevin
Quoted 29 lines · On Monday 10 June 2013 14:33:28 Kevin Wolf wrote:
Am 09.06.2013 um 12:30 hat Peter Wu geschrieben:
Quoted 28 lines
Aiming for GTK as replacement for SDL, features like -full-screen and -no-frame should also be implemented.
Bringing the window into full-screen mode is done by faking activating the full screen menu item with a NULL menu item (which currently is not used by
gd_menu_full_screen). This is done after showing the windows to make the cursor and menu hidden.Signed-off-by Peter Wu <[email protected]>---
include/ui/console.h | 2 +- ui/gtk.c | 10 +++++++++- vl.c | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-)include/ui/console.h +0
-0@@ -339,6 +339,6 @@ int index_from_keycode(int code);
Quoted 7 lines
include/ui/console.h int index_from_keycode(int code);
Quoted 5 lines
include/ui/console.h +1
-1/* gtk.c */ void early_gtk_display_init (void ); -void gtk_display_init (DisplayState *ds); +void gtk_display_init (DisplayState *ds,int full_screen,int no_frame);Should the new arguments be bool?
Probably yes, but for consistency with the existing types I kept it as int. A future patch could change all uses of "int" to "bool" where 1 or 0 are used, do you prefer to use bool here anyway?
Regards,
Peter
Am 10.06.2013 um 14:43 hat Peter Wu geschrieben:
Quoted 10 lines · On Monday 10 June 2013 14:33:28 Kevin Wolf wrote:
Quoted 9 lines
Am 09.06.2013 um 12:30 hat Peter Wu geschrieben:
Quoted 8 lines
include/ui/console.h +0
-0@@ -339,6 +339,6 @@ int index_from_keycode(int code);/* gtk.c */ void early_gtk_display_init (void );
Quoted 8 lines
Quoted 4 lines
include/ui/console.h int index_from_keycode(int code); · line 342
Quoted 2 lines
include/ui/console.h +1
-1-void gtk_display_init (DisplayState *ds); +void gtk_display_init (DisplayState *ds,int full_screen,int no_frame);Should the new arguments be bool?
Probably yes, but for consistency with the existing types I kept it as int. A future patch could change all uses of "int" to "bool" where 1 or 0 are used, do you prefer to use bool here anyway?
Yes, if you have to respin anyway, I would prefer if you changed it to bool. I mean it's not a big deal, but it moves us one step closer to consistent use of bool for boolean values, so it can't be bad.
I don't think we'll ever see one big conversion patch, but as the code is touched over time, ints abused as bools will slowly disappear if we don't introduce new instances.
Kevin
Quoted 2 lines · Peter Wu
Aiming for GTK as replacement for SDL, features like -full-screen and -no-frame should also be implemented.
I'm not sure both options really should be implemented. I think -no-frame makes little sense actually. But -full-screen is very useful, and hiding the menu bar -- actually in both full-screen mode and windowed mode -- makes very good sense, it is something the gtk interface miss alot compared with sdl.
Thanks,
/mjt