r223 - in trunk/src/target/OM-2007: artwork/themes/openmoko-standard/gtk-2.0 examples/openmoko-finger-demo openmoko-libs/libmokoui
mickey at gta01.hmw-consulting.de
mickey at gta01.hmw-consulting.de
Tue Nov 14 00:33:44 CET 2006
Author: mickey
Date: 2006-11-13 23:33:43 +0000 (Mon, 13 Nov 2006)
New Revision: 223
Added:
trunk/src/target/OM-2007/artwork/themes/openmoko-standard/gtk-2.0/mokofingerwheel
trunk/src/target/OM-2007/artwork/themes/openmoko-standard/gtk-2.0/wheel.png
trunk/src/target/OM-2007/artwork/themes/openmoko-standard/gtk-2.0/wheel_p.png
Modified:
trunk/src/target/OM-2007/artwork/themes/openmoko-standard/gtk-2.0/gtkrc
trunk/src/target/OM-2007/examples/openmoko-finger-demo/demo-main.c
trunk/src/target/OM-2007/openmoko-libs/libmokoui/moko-application.c
trunk/src/target/OM-2007/openmoko-libs/libmokoui/moko-application.h
trunk/src/target/OM-2007/openmoko-libs/libmokoui/moko-finger-wheel.c
trunk/src/target/OM-2007/openmoko-libs/libmokoui/moko-finger-wheel.h
trunk/src/target/OM-2007/openmoko-libs/libmokoui/moko-window.c
Log:
mokoui: MokoFingerWheel now shown/hidden properly :D
Modified: trunk/src/target/OM-2007/artwork/themes/openmoko-standard/gtk-2.0/gtkrc
===================================================================
--- trunk/src/target/OM-2007/artwork/themes/openmoko-standard/gtk-2.0/gtkrc 2006-11-13 18:47:30 UTC (rev 222)
+++ trunk/src/target/OM-2007/artwork/themes/openmoko-standard/gtk-2.0/gtkrc 2006-11-13 23:33:43 UTC (rev 223)
@@ -96,6 +96,7 @@
include "gtkbutton"
include "mokofingerbutton"
+include "mokofingerwheel"
include "mokomenubox"
include "mokopanedwindow"
include "mokotoolbox"
Added: trunk/src/target/OM-2007/artwork/themes/openmoko-standard/gtk-2.0/mokofingerwheel
===================================================================
--- trunk/src/target/OM-2007/artwork/themes/openmoko-standard/gtk-2.0/mokofingerwheel 2006-11-13 18:47:30 UTC (rev 222)
+++ trunk/src/target/OM-2007/artwork/themes/openmoko-standard/gtk-2.0/mokofingerwheel 2006-11-13 23:33:43 UTC (rev 223)
@@ -0,0 +1,10 @@
+style "mokofingerwheel" {
+ bg_pixmap[NORMAL] = "wheel.png"
+ bg_pixmap[PRELIGHT] = "wheel.png"
+ bg_pixmap[ACTIVE] = "wheel_p.png"
+
+ MokoFixed::size-request = { 0, 152, 0, 152 }
+ MokoFixed::cargo-border = { 10, 43, 108, 140 }
+}
+widget "*.mokofingerwheel" style "mokofingerwheel"
+
Added: trunk/src/target/OM-2007/artwork/themes/openmoko-standard/gtk-2.0/wheel.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/artwork/themes/openmoko-standard/gtk-2.0/wheel.png
___________________________________________________________________
Name: svn:mime-type
+ image/png
Added: trunk/src/target/OM-2007/artwork/themes/openmoko-standard/gtk-2.0/wheel_p.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/artwork/themes/openmoko-standard/gtk-2.0/wheel_p.png
___________________________________________________________________
Name: svn:mime-type
+ image/png
Modified: trunk/src/target/OM-2007/examples/openmoko-finger-demo/demo-main.c
===================================================================
--- trunk/src/target/OM-2007/examples/openmoko-finger-demo/demo-main.c 2006-11-13 18:47:30 UTC (rev 222)
+++ trunk/src/target/OM-2007/examples/openmoko-finger-demo/demo-main.c 2006-11-13 23:33:43 UTC (rev 223)
@@ -35,8 +35,6 @@
#include <gtk/gtkvbox.h>
#include <gtk/gtkentry.h>
-#include <stdlib.h>
-
void cb_orange_button_clicked( GtkButton* button, MokoFingerWindow* window )
{
g_debug( "openmoko-finger-demo: orange button clicked" );
Modified: trunk/src/target/OM-2007/openmoko-libs/libmokoui/moko-application.c
===================================================================
--- trunk/src/target/OM-2007/openmoko-libs/libmokoui/moko-application.c 2006-11-13 18:47:30 UTC (rev 222)
+++ trunk/src/target/OM-2007/openmoko-libs/libmokoui/moko-application.c 2006-11-13 23:33:43 UTC (rev 223)
@@ -22,13 +22,15 @@
#include <X11/Xatom.h>
#include <gdk/gdkx.h>
-#define MOKO_APPLICATION_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), MOKO_TYPE_APPLICATION, MokoApplicationPriv));
+G_DEFINE_TYPE (MokoApplication, moko_application, G_TYPE_OBJECT)
-typedef struct _MokoApplicationPriv
+#define MOKO_APPLICATION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MOKO_TYPE_APPLICATION, MokoApplicationPrivate));
+
+typedef struct _MokoApplicationPrivate
{
+ //FIXME hildon cruft, do we need all this?
gboolean killable;
gboolean is_topmost;
- GdkWindow *group_leader;
guint window_count;
GtkWidget *common_application_menu;
GtkWidget *common_filter_menu;
@@ -36,8 +38,12 @@
GSList *windows;
Window window_group;
gchar *name;
-} MokoApplicationPriv;
+ // our stuff
+ MokoWindow* main_window;
+
+} MokoApplicationPrivate;
+
enum
{
PROP_0,
@@ -50,32 +56,9 @@
static void moko_application_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec);
static void moko_application_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec);
-GType moko_application_get_type (void)
-{
- static GType program_type = 0;
-
- if (!program_type)
- {
- static const GTypeInfo program_info =
- {
- sizeof(MokoApplicationClass),
- NULL, /* base_init */
- NULL, /* base_finalize */
- (GClassInitFunc) moko_application_class_init,
- NULL, /* class_finalize */
- NULL, /* class_data */
- sizeof(MokoApplication),
- 0, /* n_preallocs */
- (GInstanceInitFunc) moko_application_init,
- };
- program_type = g_type_register_static(G_TYPE_OBJECT, "MokoApplication", &program_info, 0);
- }
- return program_type;
-}
-
static void moko_application_init (MokoApplication *self)
{
- MokoApplicationPriv *priv = MOKO_APPLICATION_GET_PRIVATE (self);
+ MokoApplicationPrivate *priv = MOKO_APPLICATION_GET_PRIVATE (self);
priv->killable = FALSE;
priv->window_count = 0;
@@ -89,7 +72,7 @@
static void moko_application_finalize (GObject *self)
{
- MokoApplicationPriv *priv = MOKO_APPLICATION_GET_PRIVATE (MOKO_APPLICATION(self));
+ MokoApplicationPrivate *priv = MOKO_APPLICATION_GET_PRIVATE (MOKO_APPLICATION(self));
if (priv->common_toolbar)
{
@@ -117,7 +100,7 @@
{
GObjectClass *object_class = G_OBJECT_CLASS(self);
- g_type_class_add_private (self, sizeof(MokoApplicationPriv));
+ g_type_class_add_private (self, sizeof(MokoApplicationPrivate));
/* Set up object virtual functions */
object_class->finalize = moko_application_finalize;
@@ -162,7 +145,7 @@
static void moko_application_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec)
{
- MokoApplicationPriv *priv = MOKO_APPLICATION_GET_PRIVATE (object);
+ MokoApplicationPrivate *priv = MOKO_APPLICATION_GET_PRIVATE (object);
switch (property_id)
{
@@ -210,12 +193,12 @@
return GDK_FILTER_CONTINUE;
}
-/* Public methods */
+/* Public API */
/**
* moko_application_get_instance:
*
- * Return value: Returns the #MokoApplication for the current process.
+ * @return the #MokoApplication for the current process.
* The object is created on the first call.
**/
MokoApplication* moko_application_get_instance (void)
@@ -224,9 +207,30 @@
if (!program)
{
- program = g_object_new (MOKO_TYPE_APPLICATION, NULL);
+ program = g_object_new(MOKO_TYPE_APPLICATION, NULL);
}
return program;
}
+/** moko_application_get_main_window
+ *
+ * @return the main #MokoWindow for the current #MokoApplication.
+ **/
+MokoWindow* moko_application_get_main_window(MokoApplication* self)
+{
+ MokoApplicationPrivate* priv = MOKO_APPLICATION_GET_PRIVATE(self);
+ return priv->main_window;
+}
+/** moko_application_set_main_window
+ *
+ * set the main #MokoWindow for this application
+ * @note usually there is no need to call this explicitly since
+ * it happens automatically when you create the first #MokoWindow
+ **/
+void moko_application_set_main_window(MokoApplication* self, MokoWindow* window)
+{
+ MokoApplicationPrivate* priv = MOKO_APPLICATION_GET_PRIVATE(self);
+ priv->main_window = window;
+ //FIXME g_object_ref the window?
+}
Modified: trunk/src/target/OM-2007/openmoko-libs/libmokoui/moko-application.h
===================================================================
--- trunk/src/target/OM-2007/openmoko-libs/libmokoui/moko-application.h 2006-11-13 18:47:30 UTC (rev 222)
+++ trunk/src/target/OM-2007/openmoko-libs/libmokoui/moko-application.h 2006-11-13 23:33:43 UTC (rev 223)
@@ -20,10 +20,13 @@
#ifndef _MOKO_APPLICATION_H_
#define _MOKO_APPLICATION_H_
-#include <glib-object.h>
+#include "moko-window.h"
+
#include <gtk/gtkmenu.h>
#include <gtk/gtktoolbar.h>
+#include <glib-object.h>
+
G_BEGIN_DECLS
#define MOKO_TYPE_APPLICATION (moko_application_get_type())
@@ -44,8 +47,9 @@
/* Public methods */
MokoApplication* moko_application_get_instance(void);
+gboolean moko_application_get_is_topmost(MokoApplication* self);
+void moko_application_set_main_window(MokoApplication* self, MokoWindow* window);
+MokoWindow* moko_application_get_main_window(MokoApplication* self);
-gboolean moko_application_get_is_topmost (MokoApplication* self);
-
G_END_DECLS
#endif /* _MOKO_APPLICATION_H_ */
Modified: trunk/src/target/OM-2007/openmoko-libs/libmokoui/moko-finger-wheel.c
===================================================================
--- trunk/src/target/OM-2007/openmoko-libs/libmokoui/moko-finger-wheel.c 2006-11-13 18:47:30 UTC (rev 222)
+++ trunk/src/target/OM-2007/openmoko-libs/libmokoui/moko-finger-wheel.c 2006-11-13 23:33:43 UTC (rev 223)
@@ -16,18 +16,26 @@
* Current Version: $Rev$ ($Date: 2006/10/05 17:38:14 $) [$Author: mickey $]
*/
+#include "moko-application.h"
#include "moko-finger-wheel.h"
+#include <gtk/gtkbutton.h>
+#include <gtk/gtkwindow.h>
+
G_DEFINE_TYPE (MokoFingerWheel, moko_finger_wheel, MOKO_TYPE_FIXED)
-#define FINGER_WHEEL_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MOKO_TYPE_FINGER_WHEEL, MokoFingerWheelPrivate))
+#define MOKO_FINGER_WHEEL_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MOKO_TYPE_FINGER_WHEEL, MokoFingerWheelPrivate))
+static MokoFixedClass *parent_class = NULL;
+
typedef struct _MokoFingerWheelPrivate
{
+ GtkWindow* popup;
} MokoFingerWheelPrivate;
/* forward declarations */
-/* ... */
+static void moko_finger_wheel_show (GtkWidget* widget);
+static void moko_finger_wheel_hide (GtkWidget* widget);
static void
moko_finger_wheel_dispose (GObject *object)
@@ -46,12 +54,17 @@
moko_finger_wheel_class_init (MokoFingerWheelClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ parent_class = g_type_class_peek_parent(klass);
/* register private data */
g_type_class_add_private (klass, sizeof (MokoFingerWheelPrivate));
/* hook virtual methods */
- /* ... */
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass);
+ widget_class->show = moko_finger_wheel_show;
+ widget_class->hide = moko_finger_wheel_hide;
+ //widget_class->show_all = moko_finger_wheel_show;
+ //widget_class->hide_all = moko_finger_wheel_hide;
/* install properties */
/* ... */
@@ -63,10 +76,58 @@
static void
moko_finger_wheel_init (MokoFingerWheel *self)
{
+ gtk_widget_set_name( GTK_WIDGET(self), "mokofingerwheel" );
}
-MokoFingerWheel*
+GtkWidget*
moko_finger_wheel_new (void)
{
- return g_object_new (MOKO_TYPE_FINGER_WHEEL, NULL);
+ return GTK_WIDGET(g_object_new(moko_finger_wheel_get_type(), NULL));
}
+
+static void moko_finger_wheel_show (GtkWidget* widget)
+{
+ gtk_widget_ensure_style( widget ); //FIXME needed here?
+ g_debug( "moko_finger_wheel_show" );
+ GTK_WIDGET_CLASS(parent_class)->show(widget);
+ MokoFingerWheelPrivate* priv = MOKO_FINGER_WHEEL_GET_PRIVATE(widget);
+ if ( !priv->popup )
+ {
+ priv->popup = gtk_window_new(GTK_WINDOW_POPUP);
+ gtk_widget_set_name( GTK_WIDGET(priv->popup), "transparent" );
+ gtk_container_add( GTK_CONTAINER(priv->popup), widget );
+ MokoWindow* window = moko_application_get_main_window( moko_application_get_instance() );
+ GtkRequisition req;
+ gtk_widget_size_request( widget, &req );
+ //g_debug( "My requisition is %d, %d", req.width, req.height );
+ int x, y, w, h;
+ gdk_window_get_geometry( GTK_WIDGET(window)->window, &x, &y, &w, &h, NULL );
+ //g_debug( "WINDOW geometry is %d, %d * %d, %d", x, y, w, h );
+ int absx;
+ int absy;
+ gdk_window_get_origin( GTK_WIDGET(window)->window, &absx, &absy );
+ GtkAllocation* alloc = >K_WIDGET(window)->allocation;
+ //g_debug( "WINDOW allocation is %d, %d * %d, %d", alloc->x, alloc->y, alloc->width, alloc->height );
+ gtk_window_move( priv->popup, absx, absy + h - req.height );
+
+ //FIXME Isn't there a way to get this as a mask directly from the style without having to reload it?
+ GdkPixbuf* pixbuf = gdk_pixbuf_new_from_file(GTK_WIDGET(widget)->style->rc_style->bg_pixmap_name[GTK_STATE_NORMAL], NULL);
+ GdkPixmap* pixmap;
+ GdkBitmap* mask;
+ gdk_pixbuf_render_pixmap_and_mask(pixbuf, &pixmap, &mask, 128);
+ g_object_unref(G_OBJECT(pixbuf));
+
+ //GdkPixmap* mask = GTK_WIDGET(widget)->style->bg_pixmap[GTK_STATE_NORMAL];
+ gtk_widget_shape_combine_mask(priv->popup, mask, 0, 0);
+ }
+ gtk_widget_show( priv->popup );
+}
+
+static void moko_finger_wheel_hide (GtkWidget* widget)
+{
+ g_debug( "moko_finger_wheel_hide" );
+ GTK_WIDGET_CLASS(parent_class)->hide(widget);
+ MokoFingerWheelPrivate* priv = MOKO_FINGER_WHEEL_GET_PRIVATE(widget);
+ gtk_widget_hide( priv->popup );
+}
+
Modified: trunk/src/target/OM-2007/openmoko-libs/libmokoui/moko-finger-wheel.h
===================================================================
--- trunk/src/target/OM-2007/openmoko-libs/libmokoui/moko-finger-wheel.h 2006-11-13 18:47:30 UTC (rev 222)
+++ trunk/src/target/OM-2007/openmoko-libs/libmokoui/moko-finger-wheel.h 2006-11-13 23:33:43 UTC (rev 223)
@@ -42,7 +42,7 @@
GType moko_finger_wheel_get_type (void);
-MokoFingerWheel* moko_finger_wheel_new (void);
+GtkWidget* moko_finger_wheel_new (void);
G_END_DECLS
Modified: trunk/src/target/OM-2007/openmoko-libs/libmokoui/moko-window.c
===================================================================
--- trunk/src/target/OM-2007/openmoko-libs/libmokoui/moko-window.c 2006-11-13 18:47:30 UTC (rev 222)
+++ trunk/src/target/OM-2007/openmoko-libs/libmokoui/moko-window.c 2006-11-13 23:33:43 UTC (rev 223)
@@ -16,6 +16,8 @@
*
* Current Version: $Rev$ ($Date$) [$Author$]
*/
+
+#include "moko-application.h"
#include "moko-window.h"
/* add your signals here */
@@ -47,6 +49,9 @@
{
g_debug( "moko_window_init" );
gtk_widget_set_size_request( GTK_WIDGET(self), 480, 640 ); //FIXME get from style
+ MokoApplication* app = moko_application_get_instance();
+ g_assert( !moko_application_get_main_window( app ) ); // fail if someone creates more than one MokoWindow per application
+ moko_application_set_main_window( app, self );
}
GtkWidget* moko_window_new() /* Construction */
More information about the commitlog
mailing list