r2901 - trunk/src/target/OM-2007.2/daemons/neod/src
mickey at sita.openmoko.org
mickey at sita.openmoko.org
Tue Sep 4 11:33:29 CEST 2007
Author: mickey
Date: 2007-09-04 11:33:29 +0200 (Tue, 04 Sep 2007)
New Revision: 2901
Modified:
trunk/src/target/OM-2007.2/daemons/neod/src/buttonactions.c
Log:
neod: add aux menu entry for toggling fullscreen mode
Modified: trunk/src/target/OM-2007.2/daemons/neod/src/buttonactions.c
===================================================================
--- trunk/src/target/OM-2007.2/daemons/neod/src/buttonactions.c 2007-09-04 06:20:38 UTC (rev 2900)
+++ trunk/src/target/OM-2007.2/daemons/neod/src/buttonactions.c 2007-09-04 09:33:29 UTC (rev 2901)
@@ -399,9 +399,49 @@
g_assert( FALSE ); // fail here if called for unknown menu
}
+void neod_buttonactions_popup_selected_fullscreen( GtkMenuItem* menu, gpointer user_data )
+{
+ static is_fullscreen = 0;
+
+ gtk_widget_hide( aux_menu );
+ Window xwindow = get_window_property( gdk_x11_get_default_root_xwindow(), gdk_x11_get_xatom_by_name("_NET_ACTIVE_WINDOW") );
+ const char* title = get_text_property( xwindow, gdk_x11_get_xatom_by_name("_NET_WM_NAME") );
+ g_debug( "active Window = %d ('%s')", (int) xwindow, title );
+
+ if ( strcmp( "Today", title ) == 0 )
+ {
+ g_debug( "sorry, i'm not going to fullscreen the today window" );
+ return;
+ }
+
+ Display* display = XOpenDisplay( NULL );
+
+ XEvent xev;
+ xev.xclient.type = ClientMessage;
+ xev.xclient.serial = 0;
+ xev.xclient.send_event = True;
+ xev.xclient.display = display;
+ xev.xclient.window = xwindow;
+ xev.xclient.message_type = gdk_x11_get_xatom_by_name( "_NET_WM_STATE" );
+ xev.xclient.format = 32;
+ xev.xclient.data.l[0] = 1 - is_fullscreen; // ADD = 1, REMOVE = 0
+
+ xev.xclient.data.l[1] = gdk_x11_get_xatom_by_name("_NET_WM_STATE_FULLSCREEN");
+ xev.xclient.data.l[2] = 0;
+ xev.xclient.data.l[3] = 0;
+ xev.xclient.data.l[4] = 0;
+
+ //TODO: add timeout checking for response
+ XSendEvent (display, gdk_x11_get_default_root_xwindow (), False,
+ SubstructureRedirectMask | SubstructureNotifyMask, &xev);
+ XCloseDisplay( display );
+
+ is_fullscreen = 1 - is_fullscreen;
+}
+
void neod_buttonactions_popup_selected_orientation( GtkMenuItem* menu, gpointer user_data )
{
- gtk_widget_hide( power_menu );
+ gtk_widget_hide( aux_menu );
if ( orientation )
g_spawn_command_line_async( "xrandr -o 1", NULL );
else
@@ -411,7 +451,7 @@
void neod_buttonactions_popup_selected_screenshot( GtkMenuItem* menu, gpointer user_data )
{
- gtk_widget_hide( power_menu );
+ gtk_widget_hide( aux_menu );
g_spawn_command_line_async( "gpe-scap", NULL );
}
@@ -478,6 +518,10 @@
{
aux_menu = gtk_menu_new();
+ GtkWidget* fullscreen = gtk_menu_item_new_with_label( "Toggle Fullscreen" );
+ g_signal_connect( G_OBJECT(fullscreen), "activate", G_CALLBACK(neod_buttonactions_popup_selected_fullscreen), NULL );
+ gtk_menu_shell_append( GTK_MENU_SHELL(aux_menu), fullscreen );
+
GtkWidget* orientation = gtk_menu_item_new_with_label( "Swap Orientation" );
g_signal_connect( G_OBJECT(orientation), "activate", G_CALLBACK(neod_buttonactions_popup_selected_orientation), NULL );
gtk_menu_shell_append( GTK_MENU_SHELL(aux_menu), orientation );
More information about the commitlog
mailing list