r3509 - in trunk/src/target/OM-2007.2/daemons/neod: . data src
mickey at sita.openmoko.org
mickey at sita.openmoko.org
Mon Nov 26 02:49:58 CET 2007
Author: mickey
Date: 2007-11-26 02:49:54 +0100 (Mon, 26 Nov 2007)
New Revision: 3509
Added:
trunk/src/target/OM-2007.2/daemons/neod/data/drag.png
trunk/src/target/OM-2007.2/daemons/neod/data/mid.png
trunk/src/target/OM-2007.2/daemons/neod/data/mokopuzzle.png
trunk/src/target/OM-2007.2/daemons/neod/data/north.png
trunk/src/target/OM-2007.2/daemons/neod/data/south.png
Modified:
trunk/src/target/OM-2007.2/daemons/neod/AUTHORS
trunk/src/target/OM-2007.2/daemons/neod/data/Makefile.am
trunk/src/target/OM-2007.2/daemons/neod/src/buttonactions.c
trunk/src/target/OM-2007.2/daemons/neod/src/buttonactions.h
Log:
neod: add display locking, code by Olaf L?\195?\188ke, artwork by 'IfChinsCouldKill'
Modified: trunk/src/target/OM-2007.2/daemons/neod/AUTHORS
===================================================================
--- trunk/src/target/OM-2007.2/daemons/neod/AUTHORS 2007-11-26 01:26:41 UTC (rev 3508)
+++ trunk/src/target/OM-2007.2/daemons/neod/AUTHORS 2007-11-26 01:49:54 UTC (rev 3509)
@@ -1,2 +1,4 @@
Michael Lauer <mickey at openmoko.org>
+Olaf Lüke (display locking logic)
+IfChinsCouldKill (artwork)
Modified: trunk/src/target/OM-2007.2/daemons/neod/data/Makefile.am
===================================================================
--- trunk/src/target/OM-2007.2/daemons/neod/data/Makefile.am 2007-11-26 01:26:41 UTC (rev 3508)
+++ trunk/src/target/OM-2007.2/daemons/neod/data/Makefile.am 2007-11-26 01:49:54 UTC (rev 3509)
@@ -1,5 +1,9 @@
resourcedir = $(pkgdatadir)
-resource_DATA = openmoko-logo.jpg
+resource_DATA = openmoko-logo.jpg \
+ drag.png \
+ mid.png \
+ north.png \
+ south.png
EXTRA_DIST = $(resource_DATA)
Added: trunk/src/target/OM-2007.2/daemons/neod/data/drag.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007.2/daemons/neod/data/drag.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007.2/daemons/neod/data/mid.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007.2/daemons/neod/data/mid.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007.2/daemons/neod/data/mokopuzzle.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007.2/daemons/neod/data/mokopuzzle.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007.2/daemons/neod/data/north.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007.2/daemons/neod/data/north.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007.2/daemons/neod/data/south.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007.2/daemons/neod/data/south.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Modified: trunk/src/target/OM-2007.2/daemons/neod/src/buttonactions.c
===================================================================
--- trunk/src/target/OM-2007.2/daemons/neod/src/buttonactions.c 2007-11-26 01:26:41 UTC (rev 3508)
+++ trunk/src/target/OM-2007.2/daemons/neod/src/buttonactions.c 2007-11-26 01:49:54 UTC (rev 3509)
@@ -93,6 +93,7 @@
GtkWidget* aux_menu = 0;
GtkWidget* power_menu = 0;
+GtkWidget* lock_display = 0;
GConfClient* gconfc = 0;
@@ -552,6 +553,12 @@
}
}
+void neod_buttonactions_popup_selected_lock_display(GtkWidget* button,
+ gpointer user_data) {
+ gtk_widget_hide(power_menu);
+ neod_buttonactions_lock_display();
+}
+
void neod_buttonactions_popup_selected_restartUI( GtkWidget* button, gpointer user_data )
{
gtk_widget_hide( power_menu );
@@ -772,7 +779,12 @@
gtk_box_pack_start_defaults( GTK_BOX(box), gtk_hseparator_new() );
- GtkWidget* lock = gtk_button_new_with_label( "Lock Now" );
+ GtkWidget* lock_display = gtk_button_new_with_label("Lock Display");
+ g_signal_connect(G_OBJECT(lock_display), "clicked",
+ G_CALLBACK(neod_buttonactions_popup_selected_lock_display), NULL);
+ gtk_box_pack_start_defaults(GTK_BOX(box), lock_display);
+
+ GtkWidget* lock = gtk_button_new_with_label("Lock Phone");
g_signal_connect( G_OBJECT(lock), "clicked", G_CALLBACK(neod_buttonactions_popup_selected_lock), NULL );
gtk_box_pack_start_defaults( GTK_BOX(box), lock );
@@ -874,7 +886,7 @@
{
g_debug( "power menu already open -- closing." );
gtk_widget_hide( power_menu );
- return;
+ return TRUE;
}
power_timer = -1;
@@ -893,7 +905,10 @@
{
g_debug( "sorry, i'm not going to close the today window" );
return FALSE;
- }
+ } else if(gtk_window_is_active(GTK_WINDOW(lock_display))) {
+ g_debug("sorry, i'm not going to close the lock window");
+ return FALSE;
+ }
Display* display = XOpenDisplay( NULL );
@@ -940,7 +955,7 @@
//TODO load this from preferences
powersave_timer1 = g_timeout_add( 10 * 1000, (GSourceFunc) neod_buttonactions_powersave_timeout1, (gpointer)1 );
- powersave_timer2 = g_timeout_add( 20 * 1000, (GSourceFunc) neod_buttonactions_powersave_timeout2, (gpointer)1 );
+ powersave_timer2 = g_timeout_add( 30 * 1000, (GSourceFunc) neod_buttonactions_powersave_timeout2, (gpointer)1 );
powersave_timer3 = g_timeout_add( 60 * 5 * 1000, (GSourceFunc) neod_buttonactions_powersave_timeout3, (gpointer)1 );
}
@@ -987,11 +1002,16 @@
else
{
char buf[10];
- int numbytes = g_sprintf( buf, "%d\0", backlight_max_brightness * brightness / 100 );
+ int numbytes = g_sprintf(
+ buf, "%d", backlight_max_brightness * brightness / 100);
+
g_debug( "writing '%s' to '%s'", buf, backlight_node );
write( fd, buf, numbytes );
close( fd );
}
+
+ if(brightness == 0)
+ neod_buttonactions_lock_display();
}
gboolean neod_buttonactions_powersave_timeout1( guint timeout )
@@ -1124,3 +1144,130 @@
return FALSE;
}
+
+/**
+ * This callback function gets triggered when the drop was successful. The
+ * lock_display window gets hidden in this situation.
+ */
+void neod_buttonactions_lock_display_on_drag(GtkWidget *widget,
+ GdkDragContext *context,
+ int x, int y,
+ GtkSelectionData *seldata,
+ guint info,
+ guint time,
+ gpointer userdata) {
+ gtk_widget_hide(lock_display);
+}
+
+/**
+ * This callback function sets the data which is send throug the
+ * drag and drop. It is necassery to set something here to allow
+ * dragging.
+ */
+void neod_buttonactions_lock_display_data_get(GtkWidget *widget,
+ GdkDragContext *context,
+ GtkSelectionData *seldata,
+ guint info,
+ guint time,
+ gpointer userdata) {
+ guchar str[] = "LOCK";
+ gtk_selection_data_set(seldata, seldata->target, 8, str, sizeof(str));
+}
+
+/**
+ * This callback function should be triggered whenever the dragging
+ * on the display lock begins. The drag image gets set as icon
+ * and gets hidden as a picture in the window.
+ */
+void neod_buttonactions_lock_display_drag_begin(GtkWidget *widget,
+ GdkDragContext *context,
+ gpointer userdata) {
+ gtk_widget_hide(GTK_WIDGET(userdata));
+
+ g_debug("lock display drag begins");
+}
+
+/**
+ * This callback function should be triggered whenever the dragging
+ * on the display lock ends.
+ */
+void neod_buttonactions_lock_display_drag_end(GtkWidget *widget,
+ GdkDragContext *context,
+ gpointer userdata) {
+ gtk_widget_show(GTK_WIDGET(userdata));
+ g_debug("lock display drag ends");
+}
+
+/**
+ * Activates the display lock. An uncloseable window is implemented,
+ * which can only be hidden if the user draws a specif motion
+ * on the display.
+ */
+void neod_buttonactions_lock_display() {
+
+ // remember last active window before showing display lock
+ last_active_window = get_window_property(
+ gdk_x11_get_default_root_xwindow(),
+ gdk_x11_get_xatom_by_name("_NET_ACTIVE_WINDOW"));
+
+ if(!lock_display) {
+ // lock display gui
+ lock_display = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+
+ GtkWidget *fixed = gtk_fixed_new();
+ gtk_fixed_put(GTK_FIXED(fixed),
+ gtk_image_new_from_file(PKGDATADIR "/south.png"), 0, 0);
+ GtkWidget *drag = gtk_image_new_from_file(PKGDATADIR "/drag.png");
+ gtk_fixed_put(GTK_FIXED(fixed), drag, 190, 0);
+
+ GtkWidget *south = gtk_event_box_new();
+ gtk_container_add(GTK_CONTAINER(south), fixed);
+
+ GtkWidget *north = gtk_event_box_new();
+ gtk_container_add(GTK_CONTAINER(north),
+ gtk_image_new_from_file(PKGDATADIR "/north.png"));
+
+ GtkWidget *mid = gtk_image_new_from_file(PKGDATADIR "/mid.png");
+
+ GtkWidget *box1 = gtk_vbox_new(0, 0);
+ gtk_box_pack_start(GTK_BOX(box1), north, 0, 0, 0);
+ gtk_box_pack_start(GTK_BOX(box1), mid, 0, 0, 0);
+ gtk_box_pack_start(GTK_BOX(box1), south, 0, 0, 0);
+
+ gtk_window_fullscreen(GTK_WINDOW(lock_display));
+ gtk_container_add(GTK_CONTAINER(lock_display), box1);
+
+ static GtkTargetEntry targetentries[] = {{"text/plain", 0, 0}};
+
+ gtk_drag_dest_set(north, GTK_DEST_DEFAULT_ALL, targetentries, 1,
+ GDK_ACTION_COPY);
+ gtk_drag_source_set(south, GDK_BUTTON1_MASK, targetentries, 1,
+ GDK_ACTION_COPY);
+
+ // drag and drop signals
+ gtk_signal_connect(GTK_OBJECT(north), "drag_data_received",
+ GTK_SIGNAL_FUNC(neod_buttonactions_lock_display_on_drag), NULL);
+ gtk_signal_connect(GTK_OBJECT(south), "drag_data_get",
+ GTK_SIGNAL_FUNC(neod_buttonactions_lock_display_data_get), NULL);
+ gtk_signal_connect(GTK_OBJECT(south), "drag_begin",
+ GTK_SIGNAL_FUNC(neod_buttonactions_lock_display_drag_begin), drag);
+ gtk_signal_connect(GTK_OBJECT(south), "drag_end",
+ GTK_SIGNAL_FUNC(neod_buttonactions_lock_display_drag_end), drag);
+
+ // drag and drop icon
+ GdkPixmap *pixmap = NULL;
+ GdkBitmap *mask = NULL;
+
+ GdkPixbuf *drag_gdk =
+ gdk_pixbuf_new_from_file(PKGDATADIR "/drag.png", NULL);
+
+ gdk_pixbuf_render_pixmap_and_mask(drag_gdk, &pixmap, &mask, 128);
+ gtk_drag_set_default_icon(gdk_colormap_get_system(), pixmap, mask,
+ gdk_pixbuf_get_width(drag_gdk) / 2,
+ gdk_pixbuf_get_height(drag_gdk) / 2);
+ }
+ gtk_widget_show_all(lock_display);
+
+ g_debug("display locked");
+}
+
Modified: trunk/src/target/OM-2007.2/daemons/neod/src/buttonactions.h
===================================================================
--- trunk/src/target/OM-2007.2/daemons/neod/src/buttonactions.h 2007-11-26 01:26:41 UTC (rev 3508)
+++ trunk/src/target/OM-2007.2/daemons/neod/src/buttonactions.h 2007-11-26 01:49:54 UTC (rev 3509)
@@ -40,6 +40,9 @@
void neod_buttonactions_sound_init();
void neod_buttonactions_set_display( int brightness );
void neod_buttonactions_sound_play( const gchar* samplename );
+
gboolean neod_buttonactions_initial_update();
+gboolean neod_buttonactions_install_watcher();
+void neod_buttonactions_lock_display();
#endif
More information about the commitlog
mailing list