r535 - in trunk/src/target/OM-2007/applications/openmoko-taskmanager: . src
tongsong_li at gta01.hmw-consulting.de
tongsong_li at gta01.hmw-consulting.de
Thu Jan 11 10:39:41 CET 2007
Author: tongsong_li
Date: 2007-01-11 10:39:15 +0100 (Thu, 11 Jan 2007)
New Revision: 535
Modified:
trunk/src/target/OM-2007/applications/openmoko-taskmanager/Makefile.am
trunk/src/target/OM-2007/applications/openmoko-taskmanager/configure.ac
trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/callbacks.c
trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/callbacks.h
trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/list_view.c
trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/list_view.h
trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/misc.c
trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/misc.h
trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/popupmenu.c
trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/popupmenu.h
trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/taskmanager.c
trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/taskmanager.h
trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/xatoms.c
trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/xatoms.h
Log:
add functions of four toolbox buttons and finger wheel buttons, impliment MokoTaskList object with GtkTreeView, Sun Zhiyong <sunzhiyong at fic-sh.com.cn>
Modified: trunk/src/target/OM-2007/applications/openmoko-taskmanager/Makefile.am
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-taskmanager/Makefile.am 2007-01-10 12:50:44 UTC (rev 534)
+++ trunk/src/target/OM-2007/applications/openmoko-taskmanager/Makefile.am 2007-01-11 09:39:15 UTC (rev 535)
@@ -1,2 +1,2 @@
-SUBDIRS = src
+SUBDIRS = src data
Modified: trunk/src/target/OM-2007/applications/openmoko-taskmanager/configure.ac
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-taskmanager/configure.ac 2007-01-10 12:50:44 UTC (rev 534)
+++ trunk/src/target/OM-2007/applications/openmoko-taskmanager/configure.ac 2007-01-11 09:39:15 UTC (rev 535)
@@ -1,5 +1,5 @@
AC_PREREQ(2.53)
-AC_INIT(%(APPNAME), %(APPVERSION), %(APPCONTACT))
+AC_INIT(openmoko-taskmanager, %(0.0.1), http://www.openmoko.org)
AM_INIT_AUTOMAKE()
AC_CONFIG_SRCDIR(src/taskmanager.c)
AM_CONFIG_HEADER(config.h)
@@ -13,6 +13,8 @@
# base deps
PKG_CHECK_MODULES(OPENMOKO, openmoko-libs >= 0.0.1,,
AC_MSG_ERROR([*** Required OpenMoko Libraries >= 0.0.1 not installed ***]))
+PKG_CHECK_MODULES(LIBMB, libmb, ,
+ exit)
LIBS="$LIBS $GTK_LIBS"
CFLAGS="$CFLAGS $OPENMOKO_CFLAGS"
@@ -20,4 +22,5 @@
AC_OUTPUT([
Makefile
src/Makefile
+data/Makefile
])
Modified: trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/callbacks.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/callbacks.c 2007-01-10 12:50:44 UTC (rev 534)
+++ trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/callbacks.c 2007-01-11 09:39:15 UTC (rev 535)
@@ -19,43 +19,41 @@
#include "callbacks.h"
-void
-om_update_store_list (Display *dpy, GtkListStore *list_store);
-
-void
-om_set_list_highlight (Display *dpy, List *l);
-
GdkFilterReturn
-om_window_filter (GdkXEvent *xev, GdkEvent *gev, List *l) {
+moko_window_filter (GdkXEvent *xev, GdkEvent *gev, MokoTaskList*l)
+{
XEvent *ev = (XEvent *)xev;
Display *dpy = ev->xany.display;
if (ev->xany.type == PropertyNotify
&& ev->xproperty.window == DefaultRootWindow (dpy)) {
if (ev->xproperty.atom == atoms[_NET_CLIENT_LIST]) {
- om_update_store_list(dpy, l->list_store);
+ moko_update_store_list(dpy, l->list_store);
}
else if (ev->xproperty.atom == atoms[_NET_ACTIVE_WINDOW]) {
- om_set_list_highlight (dpy, l);
+ moko_set_list_highlight (dpy, l);
}
}
return GDK_FILTER_CONTINUE;
}
gboolean
-om_wm_cmd (GtkWidget *w, GtkWidget *list_view, int task) {
+moko_wm_cmd (GtkWidget *w, GtkWidget *list_view, int task)
+{
GtkTreeSelection *sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (list_view));
GtkTreeIter iter;
GtkTreeModel *model;
- if (gtk_tree_selection_get_selected (sel, &model, &iter)) {
+ if (gtk_tree_selection_get_selected (sel, &model, &iter))
+ {
Window w;
- gtk_tree_model_get (GTK_TREE_MODEL (model), &iter, 1, &w, -1);
+ gtk_tree_model_get (GTK_TREE_MODEL (model), &iter, OBJECT_COL, &w, -1);
mbcommand(GDK_DISPLAY(), task, w, NULL);
return TRUE;
}
- else {
+ else
+ {
/*GtkMessageDialog* dialog = gtk_message_dialog_new (GTK_WINDOW(gtk_widget_get_toplevel(w)),
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_ERROR,
@@ -66,146 +64,173 @@
return TRUE;
*/
g_debug ("send message to footer");
+ return FALSE;
}
- }
+}
-
gboolean
-om_cursor_changed(GtkTreeView *treeview, GtkTreeModel *model) {
+moko_cursor_changed(GtkTreeView *treeview, GtkTreeModel *model)
+{
g_debug ("Tab event");
- }
+
+}
+
void
-om_add_window (Display *dpy, Window w, GtkListStore *list_store){
- GtkTreeIter iter;
- gchar *name = NULL;
- GdkPixbuf *icon = NULL;
- Atom type;
+moko_go_to_btn_cb (GtkButton *btn, MokoTaskManager *tm)
+{
+ if (!tm)
+ return;
+ moko_wm_cmd (GTK_WIDGET (tm),
+ GTK_WIDGET (tm->l->list_view), MB_CMD_ACTIVAE_CLIENT);
+}
- icon = om_get_window_icon (dpy, w);
- name = om_get_window_name(dpy, w);
- gtk_list_store_append (list_store, &iter);
- gtk_list_store_set (list_store, &iter, 0, name, 1, w, -1);
- //gtk_list_store_set (list_store, &iter, 1, w, -1);
+void
+moko_kill_btn_cb (GtkButton *btn, MokoTaskManager *tm)
+{
+ if (!tm)
+ return;
+ moko_wm_cmd (GTK_WIDGET (tm),
+ GTK_WIDGET (tm->l->list_view), MB_CMD_REMOVE_CLIENT);
+}
- if (icon) {
- GdkPixbuf *icons = gdk_pixbuf_scale_simple (icon, 160, 160, GDK_INTERP_BILINEAR);
- gdk_pixbuf_unref (icon);
- gtk_list_store_set (list_store, &iter, 2, icons, -1);
- }
- /*FIXME if no icon there should be a default icon to be added*/
- /*else {
- GtkWidget *def_icon = gtk_image_new_from_stock(GTK_STOCK_CLOSE, GTK_ICON_SIZE_SMALL_TOOLBAR);
- GdkPixbuf *icons = gdk_pixbuf_scale_simple (def_icon, 160, 160, GDK_INTERP_BILINEAR);
- gdk_pixbuf_unref (def_icon);
- gtk_list_store_set (list_store, &iter, 2, icons, -1);
- }
- */
- }
-
-void
-om_update_store_list (Display *dpy, GtkListStore *list_store) {
- Window *list;
- guint nr, i;
+void
+moko_kill_all_btn_cb (GtkButton *btn, MokoTaskManager *tm)
+{
+ GtkTreeSelection *sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (tm->l->list_view));
GtkTreeIter iter;
- char *p;
+ GtkTreeModel *model;
+ Window *win;
+ GSList *list = NULL;
+
+ gtk_tree_selection_get_selected (sel, &model, &iter);
- if (om_update_net_undocked_client_list (dpy, &list, &nr) == FALSE)
+ if (!gtk_tree_model_get_iter_first (model, &iter))
return;
- p = g_malloc0 (nr);
-
- if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (list_store), &iter)) {
- gboolean more;
- do{
- gboolean found = FALSE;
- Window w;
- gtk_tree_model_get (GTK_TREE_MODEL (list_store), &iter, 1, &w, -1);
- for (i=0; i<nr; i++) {
- if (list[i] == w) {
- p[i] = 1;
- found = TRUE;
- break;
- }
- }
- if (found)
- more = gtk_tree_model_iter_next (GTK_TREE_MODEL (list_store), &iter);
- else
- more = gtk_list_store_remove (list_store, &iter);
- }
- while (more);
- }
- for (i=0; i<nr; i++) {
- if (p[i] == 0 && list[i] != my_win)
- om_add_window (dpy, list[i], list_store);
+ do
+ {
+ gtk_tree_model_get (GTK_TREE_MODEL (model), &iter, OBJECT_COL, &win, -1);
+ list = g_slist_append (list, win);
+ if (!gtk_tree_model_iter_next (model, &iter))
+ break;
}
+ while (1);
- g_free (p);
-}
-
-
-void
-om_set_list_highlight (Display *dpy, List *l) {
- Window *wp;
- Atom type;
- int format;
- unsigned long nitems;
- unsigned long bytes_after;
+ do{
+ mbcommand (GDK_DISPLAY(), MB_CMD_REMOVE_CLIENT, list->data, NULL);
+ g_debug ("%d", list->data);
- if (XGetWindowProperty (dpy, DefaultRootWindow (dpy), atoms[_NET_ACTIVE_WINDOW],
- 0, 4, False, XA_WINDOW, &type, &format, &nitems, &bytes_after,
- (unsigned char **)&wp) == Success) {
- if (wp) {
- Window w;
- w = *wp;
- if (w != 0 && w != my_win) {
- GtkTreeIter iter;
- if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (l->list_store), &iter)) {
- Window iw;
- do {
- gtk_tree_model_get (GTK_TREE_MODEL (l->list_store), &iter, 1, &iw, -1);
- if (iw == w) {
- GtkTreePath *path;
- path = gtk_tree_model_get_path (GTK_TREE_MODEL (l->list_store), &iter);
- //gtk_tree_view_set_cursor (GTK_TREE_VIEW (l->mokolist_view), path, NULL, FALSE);
- gtk_tree_view_set_cursor (GTK_TREE_VIEW (l->list_view), path, NULL, FALSE);
- gtk_tree_path_free (path);
- break;
- }
- }while (gtk_tree_model_iter_next (GTK_TREE_MODEL (l->list_store), &iter));
- }
- }
- XFree (wp);
- }
- }
- }
+ }
+ while (list = g_slist_next (list));
+ /*Window w;
+ gtk_tree_model_get (GTK_TREE_MODEL (model), &iter, OBJECT_COL, &w, -1);
+ mbcommand(GDK_DISPLAY(), task, w, NULL);
+ return TRUE;
+ }
+*/
+ if (list)
+ g_slist_free (list);
+}
void
-om_tab_event_cb (GtkButton *btn, List *l) {
+moko_quit_btn_cb (GtkButton *btn, MokoTaskManager *tm)
+{
+ if (!tm)
+ return;
+ gtk_widget_hide (GTK_WIDGET (tm->wheel));
+ gtk_widget_hide (GTK_WIDGET (tm->toolbox));
+ gtk_widget_hide (GTK_WIDGET (tm->window));
+}
+
+void
+moko_tab_event_cb (GtkButton *btn, MokoTaskList *l)
+{
g_debug ("tab event");
GtkTreeIter iter;
GtkTreePath *path;
GtkTreeViewColumn *col;
GtkTreeModel *model;
- gtk_tree_view_get_cursor(l->list_view, &path, &col);
+ gtk_tree_view_get_cursor(GTK_TREE_VIEW (l->list_view), &path, &col);
//gtk_tree_view_get_cursor(l->mokolist_view, &path, &col);
model = GTK_TREE_MODEL (l->list_store);
if (gtk_tree_model_get_iter (model, &iter, path)) {
Window w;
- gtk_tree_model_get (model, &iter, 1, &w, -1);
- //om_print_win_list(GDK_DISPLAY(), &w, 1);
- //om_send_Xclimsgwm(GDK_DISPLAY (), w);
+ gtk_tree_model_get (model, &iter, OBJECT_COL, &w, -1);
+ //moko_print_win_list(GDK_DISPLAY(), &w, 1);
+ //moko_send_Xclimsgwm(GDK_DISPLAY (), w);
mbcommand(GDK_DISPLAY(), MB_CMD_ACTIVAE_CLIENT, w, NULL);
}
if (path)
free (path);
- }
+}
void
-om_hold_event_cb (GtkButton *btn, List *l) {
- g_debug ("tab with hold event");
- om_init_popup_menu(NULL, NULL, l);
- }
+moko_hold_event_cb (GtkButton *btn, MokoTaskList *l)
+{
+ moko_init_popup_menu(NULL, NULL, l);
+ }
+
+void
+moko_wheel_left_up_press_cb (GtkWidget *self, MokoTaskManager *tm)
+{
+ GtkTreeSelection *selection;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ GtkTreePath* path;
+
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (tm->l->list_view));
+
+ if (!gtk_tree_selection_get_selected (selection, &model, &iter))
+ return;
+
+ path = gtk_tree_model_get_path (model, &iter);
+ if (!gtk_tree_path_prev (path))
+ {
+ gtk_tree_path_free (path);
+ return;
+ }
+
+ gtk_tree_view_set_cursor (GTK_TREE_VIEW (tm->l->list_view), path, 0, 0);
+ gtk_tree_path_free (path);
+ return;
+}
+
+void
+moko_wheel_right_down_press_cb (GtkWidget *self, MokoTaskManager *tm)
+{
+ GtkTreeSelection *selection;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ GtkTreePath* path;
+
+ if (!tm->l->list_view)
+ return;
+
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (tm->l->list_view));
+
+ if (!gtk_tree_selection_get_selected (selection, &model, &iter))
+ return;
+
+ path = gtk_tree_model_get_path (model, &iter);
+ gtk_tree_path_next (path);
+
+ if (!path)
+ return;
+
+ gtk_tree_view_set_cursor (GTK_TREE_VIEW (tm->l->list_view), path, 0, 0);
+ gtk_tree_path_free (path);
+ return;
+ }
+
+void
+moko_wheel_bottom_press_cb (GtkWidget *self, MokoTaskManager *tm)
+{
+ if (!tm)
+ return;
+ gtk_main_quit ();
+ g_free (tm);
+}
Modified: trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/callbacks.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/callbacks.h 2007-01-10 12:50:44 UTC (rev 534)
+++ trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/callbacks.h 2007-01-11 09:39:15 UTC (rev 535)
@@ -22,31 +22,54 @@
#include <gtk/gtk.h>
#include <X11/Xlib.h>
+#include "taskmanager.h"
#include "misc.h"
#include "list_view.h"
#include "xatoms.h"
#include "popupmenu.h"
GdkFilterReturn
-om_window_filter (GdkXEvent *xev, GdkEvent *gev, List *l);
+moko_window_filter (GdkXEvent *xev, GdkEvent *gev, MokoTaskList*l);
void
-om_activate_task (GtkWidget *w, GtkWidget *list_view);
+moko_activate_task (GtkWidget *w, GtkWidget *list_view);
gboolean
-om_kill_task (GtkWidget *w, GtkWidget *list_view);
+moko_kill_task (GtkWidget *w, GtkWidget *list_view);
void
-om_row_activated (GtkTreeView *treeview, GtkTreePath *path,
+moko_row_activated (GtkTreeView *treeview, GtkTreePath *path,
GtkTreeViewColumn *col, GtkTreeModel *model);
gboolean
-om_cursor_changed(GtkTreeView *treeview, GtkTreeModel *model);
+moko_cursor_changed(GtkTreeView *treeview, GtkTreeModel *model);
void
-om_tab_event_cb (GtkButton *btn, List *l);
+moko_quit_btn_cb (GtkButton *btn, MokoTaskManager *tm);
+void
+moko_kill_btn_cb (GtkButton *btn, MokoTaskManager *tm);
+
+void
+moko_kill_all_btn_cb (GtkButton *btn, MokoTaskManager *tm);
+
+void
+moko_go_to_btn_cb (GtkButton *btn, MokoTaskManager *tm);
+
+void
+moko_tab_event_cb (GtkButton *btn, MokoTaskList *l);
+
void
-om_hold_event_cb (GtkButton *btn, List *l);
+moko_hold_event_cb (GtkButton *btn, MokoTaskList *l);
+void
+moko_wheel_left_up_press_cb (GtkWidget *self, MokoTaskManager *tm);
+
+void
+moko_wheel_right_down_press_cb (GtkWidget *self, MokoTaskManager *tm);
+
+void
+moko_wheel_bottom_press_cb (GtkWidget *self, MokoTaskManager *tm);
+
+
#endif /*callbacks.h*/
Modified: trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/list_view.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/list_view.c 2007-01-10 12:50:44 UTC (rev 534)
+++ trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/list_view.c 2007-01-11 09:39:15 UTC (rev 535)
@@ -17,24 +17,27 @@
* General Public License for more details.
*/
- #include "list_view.h"
+#include "list_view.h"
+#include <gdk/gdk.h>
- enum {
+static GdkPixbuf *default_icon;
+
+enum {
LIST_SIGNAL,
LAST_SIGNAL
};
-static void list_class_init (ListClass *klass);
-static void list_init (List *l);
+static void moko_task_list_class_init (MokoTaskListClass *klass);
+static void moko_task_list_init (MokoTaskList *l);
static guint list_signals[LAST_SIGNAL] = { 0 };
/**
-*@brief retrun List type.
+*@brief retrun MokoTaskList type.
*@param none
*@return GType
*/
-GType list_get_type (void) /* Typechecking */
+GType moko_task_list_get_type (void) /* Typechecking */
{
static GType list_type = 0;
@@ -42,35 +45,35 @@
{
static const GTypeInfo list_info =
{
- sizeof (ListClass),
+ sizeof (MokoTaskListClass),
NULL, /* base_init */
NULL, /* base_finalize */
- (GClassInitFunc) list_class_init,
+ (GClassInitFunc) moko_task_list_class_init,
NULL, /* class_finalize */
NULL, /* class_data */
- sizeof (List),
+ sizeof (MokoTaskList),
0,
- (GInstanceInitFunc) list_init,
+ (GInstanceInitFunc) moko_task_list_init,
NULL
};
- list_type = g_type_register_static (GTK_TYPE_VBOX, "List", &list_info, 0);
+ list_type = g_type_register_static (GTK_TYPE_VBOX, "MokoTaskList", &list_info, 0);
}
return list_type;
}
/**
-*@brief initialize List class.
-*@param klass List Class
+*@brief initialize MokoTaskList class.
+*@param klass MokoTaskList Class
*@return none
*/
-static void list_class_init(ListClass * Klass) /* Class Initialization */
+static void moko_task_list_class_init(MokoTaskListClass * Klass) /* Class Initialization */
{
list_signals[LIST_SIGNAL] = g_signal_new ("list",
G_TYPE_FROM_CLASS (Klass),
G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
- G_STRUCT_OFFSET (ListClass, list),
+ G_STRUCT_OFFSET (MokoTaskListClass, list),
NULL,
NULL,
g_cclosure_marshal_VOID__VOID,
@@ -79,20 +82,29 @@
}
/**
-*@brief initialize List UI.
-*@param l List instance
+*@brief initialize MokoTaskList UI.
+*@param l MokoTaskList instance
*@return none
*/
static void /* Instance Construction */
-list_init (List *l) {
- GtkWidget *ico;
- l->list_store = gtk_list_store_new (3, G_TYPE_STRING, G_TYPE_INT, G_TYPE_OBJECT);
+moko_task_list_init (MokoTaskList *l)
+{
+ GtkCellRenderer *renderer;
+ GtkTreeViewColumn *column;
+ // GtkWidget *ico;
+ GtkWidget *align;
+
+ align=gtk_alignment_new(0, 0, 1, 1);
+ gtk_alignment_set_padding(GTK_ALIGNMENT (align), 0, 150, 0, 0);
+ l->list_store = gtk_list_store_new (3, G_TYPE_STRING, G_TYPE_INT, GDK_TYPE_PIXBUF);
l->list_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (l->list_store));
+ gtk_widget_set_name (l->list_view, "gtktreeview-black");
+ gtk_widget_show (l->list_view);
//l->mokolist_view = moko_tree_view_new_with_model (GTK_TREE_MODEL (l->list_store));
gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (l->list_view), FALSE);
//gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (l->mokolist_view), FALSE);
- l->renderer = gtk_cell_renderer_pixbuf_new ();
+ /* l->renderer = gtk_cell_renderer_pixbuf_new ();
l->column = gtk_tree_view_column_new_with_attributes ("Icon", l->renderer, "pixbuf", 2, NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (l->list_view), l->column);
//moko_tree_view_append_column (GTK_TREE_VIEW (l->mokolist_view), l->column);
@@ -101,48 +113,169 @@
l->column = gtk_tree_view_column_new_with_attributes ("Running programs", l->renderer,
"text", 0, NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (l->list_view), l->column);
- // */
- // moko_tree_view_append_column (GTK_TREE_VIEW (l->mokolist_view), l->column);
+ */
+
+ column = gtk_tree_view_column_new();
+ gtk_tree_view_column_set_title (column, ("Task list"));
+ gtk_tree_view_column_set_resizable (column, TRUE);
+
+ renderer = gtk_cell_renderer_pixbuf_new ();
+ gtk_tree_view_column_pack_start (column, renderer , FALSE);
+ gtk_tree_view_column_set_attributes (column, renderer ,
+ "pixbuf", PIXBUF_COL, NULL);
+
+ renderer = gtk_cell_renderer_text_new ();
+ gtk_tree_view_column_pack_start (column, renderer , FALSE);
+ gtk_tree_view_column_set_attributes(column, renderer ,
+ "text", TEXT_COL, NULL);
+
+ gtk_tree_view_append_column (GTK_TREE_VIEW (l->list_view), column);
l->scrolled = gtk_scrolled_window_new (NULL, NULL);
+ gtk_widget_show (l->scrolled);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (l->scrolled),
- GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
- gtk_container_add (GTK_CONTAINER (l->scrolled), l->list_view);
-
+ GTK_POLICY_NEVER, GTK_POLICY_NEVER);
+ gtk_container_add (GTK_CONTAINER (align), l->list_view);
+ gtk_container_add (GTK_CONTAINER (l->scrolled), align);
+ gtk_widget_set_size_request (l->scrolled, -1, 400);
+
//l->scrolled = moko_tree_view_put_into_scrolled_window (l->mokolist_view);
- l->btn_close = gtk_button_new ();
- ico = gtk_image_new_from_stock(GTK_STOCK_CLOSE, GTK_ICON_SIZE_SMALL_TOOLBAR);
- gtk_widget_show (ico);
- gtk_container_add(GTK_CONTAINER(l->btn_close), ico);
- gtk_widget_show (l->btn_close);
-
- l->hbox = gtk_hbox_new (FALSE, 0);
- gtk_widget_show (l->hbox);
-
- gtk_box_pack_start (GTK_BOX (l), l->hbox, FALSE, FALSE, 0);
- gtk_box_pack_end (l->hbox, l->btn_close, FALSE, FALSE, 0);
- gtk_box_pack_end (GTK_BOX (l), l->scrolled, TRUE, TRUE, 0);
-
-/*delete later*/
- l->tab = gtk_button_new_with_label ("tab");
- l->tabhold = gtk_button_new_with_label ("tab with hold");
- gtk_widget_show (l->tab);
- gtk_widget_show (l->tabhold);
- gtk_box_pack_start (GTK_BOX (l), l->tab, FALSE, FALSE, 0);
- gtk_box_pack_start (GTK_BOX (l), l->tabhold, FALSE, FALSE, 0);
-/*end deleter later*/
+ //gtk_box_pack_start (GTK_BOX (l), l->hbox, FALSE, FALSE, 0);
+ //gtk_box_pack_end (l->hbox, l->btn_close, FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (l), l->scrolled, TRUE, TRUE, 0);
+
+ default_icon = gdk_pixbuf_new_from_file_at_size (PKGDATADIR"/default-app-icon.xpm",
+ 160, 160, NULL);
+ if (!default_icon )
+ g_error ("Failed to load default icon");
}
/* Construction */
GtkWidget*
-list_new() {
- return GTK_WIDGET(g_object_new(list_get_type(), NULL));
+moko_task_list_new()
+{
+ return GTK_WIDGET(g_object_new(moko_task_list_get_type(), NULL));
}
/* Destruction */
void
-list_clear(List *l) {
+moko_task_list_clear(MokoTaskList *l) {
if (!l) g_free (l);
}
+static void
+moko_add_window (Display *dpy, Window w, GtkListStore *list_store)
+{
+ GtkTreeIter iter;
+ gchar *name = NULL;
+ GdkPixbuf *icon = NULL;
+
+ name = moko_get_window_name(dpy, w);
+ if (!strcmp (name, "Openmoko-taskmanager"))
+ {
+ g_free (name);
+ return;
+ }
+
+ icon = moko_get_window_icon (dpy, w);
+ gtk_list_store_append (list_store, &iter);
+ gtk_list_store_set (list_store, &iter, TEXT_COL, name, OBJECT_COL, w, -1);
+
+ if (icon) {
+ GdkPixbuf *icons = gdk_pixbuf_scale_simple (icon, 160, 160, GDK_INTERP_BILINEAR);
+ gtk_list_store_set (list_store, &iter, PIXBUF_COL, icons, -1);
+ gdk_pixbuf_unref (icons);
+ }
+ else if (default_icon)
+ gtk_list_store_set (list_store, &iter, PIXBUF_COL, default_icon, -1);
+ else
+ g_error ("Failed to load %s's icon", name);
+
+ gdk_pixbuf_unref (icon);
+ g_free (name);
+ }
+
+void
+moko_update_store_list (Display *dpy, GtkListStore *list_store)
+{
+ Window *list;
+ guint nr, i;
+ GtkTreeIter iter;
+ char *p;
+
+ if (moko_update_net_undocked_client_list (dpy, &list, &nr) == FALSE)
+ return;
+ p = g_malloc0 (nr);
+
+ if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (list_store), &iter)) {
+ gboolean more;
+ do{
+ gboolean found = FALSE;
+ Window w;
+ gtk_tree_model_get (GTK_TREE_MODEL (list_store), &iter, OBJECT_COL, &w, -1);
+ for (i=0; i<nr; i++) {
+ if (list[i] == w) {
+ p[i] = 1;
+ found = TRUE;
+ break;
+ }
+ }
+ if (found)
+ more = gtk_tree_model_iter_next (GTK_TREE_MODEL (list_store), &iter);
+ else
+ more = gtk_list_store_remove (list_store, &iter);
+ }
+ while (more);
+ }
+
+ for (i=0; i<nr; i++) {
+ if (p[i] == 0 && list[i] != my_win)
+ moko_add_window (dpy, list[i], list_store);
+ }
+
+ g_free (p);
+}
+
+void
+moko_set_list_highlight (Display *dpy, MokoTaskList *l)
+{
+ Window *wp;
+ Atom type;
+ int format;
+ unsigned long nitems;
+ unsigned long bytes_after;
+
+ if (XGetWindowProperty (dpy, DefaultRootWindow (dpy), atoms[_NET_ACTIVE_WINDOW],
+ 0, 4, False, XA_WINDOW, &type, &format, &nitems, &bytes_after,
+ (unsigned char **)&wp) == Success)
+ {
+ if (wp)
+ {
+ Window w;
+ w = *wp;
+ if (w != 0 && w != my_win)
+ {
+ GtkTreeIter iter;
+ if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (l->list_store), &iter))
+ {
+ Window iw;
+ do
+ {
+ gtk_tree_model_get (GTK_TREE_MODEL (l->list_store), &iter, OBJECT_COL, &iw, -1);
+ if (iw == w)
+ {
+ GtkTreePath *path;
+ path = gtk_tree_model_get_path (GTK_TREE_MODEL (l->list_store), &iter);
+ gtk_tree_view_set_cursor (GTK_TREE_VIEW (l->list_view), path, NULL, FALSE);
+ gtk_tree_path_free (path);
+ break;
+ }
+ }while (gtk_tree_model_iter_next (GTK_TREE_MODEL (l->list_store), &iter));
+ }
+ }
+ XFree (wp);
+ }
+ }
+}
+
Modified: trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/list_view.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/list_view.h 2007-01-10 12:50:44 UTC (rev 534)
+++ trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/list_view.h 2007-01-11 09:39:15 UTC (rev 535)
@@ -28,44 +28,54 @@
#include "misc.h"
+enum{
+ TEXT_COL = 0,
+ OBJECT_COL,
+ PIXBUF_COL,
+ MAX_COL
+};
+
G_BEGIN_DECLS
-/*LIST property*/
+/*MOKOTASKLIST property*/
+
/*Pango Font spec*/
-#define LIST_TYPE (list_get_type())
-#define LIST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LIST_TYPE, List))
-#define LIST_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), LIST_TYPE, ListClass))
-#define IS_LIST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LIST_TYPE))
-#define IS_LIST_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), LIST_TYPE))
+#define MOKOTASKLIST_TYPE (list_get_type())
+#define MOKOTASKLIST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MOKOTASKLIST_TYPE, MokoTaskList))
+#define MOKOTASKLIST_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MOKOTASKLIST_TYPE, MokoTaskListClass))
+#define IS_MOKOTASKLIST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MOKOTASKLIST_TYPE))
+#define IS_MOKOTASKLIST_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MOKOTASKLIST_TYPE))
-typedef struct _List List;
-typedef struct _ListClass ListClass;
+typedef struct _MokoTaskList MokoTaskList;
+typedef struct _MokoTaskListClass MokoTaskListClass;
-struct _List
+struct _MokoTaskList
{
GtkVBox vbox;
GtkHBox *hbox;
- GtkButton *btn_close;
GtkListStore *list_store;
GtkWidget *list_view;
GtkWidget *scrolled;
- GtkCellRenderer *renderer;
- GtkTreeViewColumn *column;
- //MokoTreeView *mokolist_view;
-
- /*temporary */
- GtkButton *tab, *tabhold;
};
-struct _ListClass
+struct _MokoTaskListClass
{
GtkVBoxClass parent_class;
- void(*list) (List *l);
+ void(*list) (MokoTaskList *l);
};
GType list_get_type (void);
+GtkWidget*
+list_new();
+
+void
+moko_update_store_list (Display *dpy, GtkListStore *list_store);
+
+void
+moko_set_list_highlight (Display *dpy, MokoTaskList *l) ;
+
G_END_DECLS
#endif /*list_view.h*/
Modified: trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/misc.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/misc.c 2007-01-10 12:50:44 UTC (rev 534)
+++ trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/misc.c 2007-01-11 09:39:15 UTC (rev 535)
@@ -20,16 +20,16 @@
#include "misc.h"
gboolean
-om_X_ev_init (Display *dpy, GtkWidget *gtkwidget) {
+moko_X_ev_init (Display *dpy, GtkWidget *gtkwidget) {
if (my_win == None)
my_win = GDK_WINDOW_XWINDOW (gtkwidget);
- if (!om_initialize_X_atoms(dpy))
+ if (!moko_initialize_X_atoms(dpy))
return FALSE;
return TRUE;
}
gboolean
-om_update_net_undocked_client_list(Display *dpy, Window** list, guint * nr) {
+moko_update_net_undocked_client_list(Display *dpy, Window** list, guint * nr) {
Atom actual_type, type;
Window *temp_list;
int actual_format;
@@ -37,14 +37,14 @@
unsigned char *prop = NULL;
int counter = 0, i = 0, rc;
- om_initialize_X_atoms(dpy);
+ moko_initialize_X_atoms(dpy);
rc = XGetWindowProperty (dpy, DefaultRootWindow (dpy), atoms[_NET_CLIENT_LIST],
0, G_MAXLONG, False, XA_WINDOW, &actual_type, &actual_format,
&nitems, &bytes_after, &prop);
if (rc != Success || prop == NULL)
return FALSE;
- //om_print_win_list(dpy, prop, nitems);
+ //moko_print_win_list(dpy, prop, nitems);
temp_list = g_malloc0 (sizeof (Window) * nitems);
if (temp_list == NULL) {
XFree (prop);
@@ -52,13 +52,13 @@
}
memcpy (temp_list, prop, sizeof (Window) * nitems);
XFree (prop);
- //om_print_win_list(dpy, temp_list, nitems);
+ //moko_print_win_list(dpy, temp_list, nitems);
/*need to make clear thar whether the "Client List" is ordered by the
atom "_NET_WM_WINDOW_TYPE", if it does, what we need to do will become
more simple that only find the boundary of "dock" and "Undock" window in the list.
*/
for (i=0; i<nitems; i++) {
- type = om_get_window_property (dpy, temp_list[i], atoms[_NET_WM_WINDOW_TYPE]);
+ type = moko_get_window_property (dpy, temp_list[i], atoms[_NET_WM_WINDOW_TYPE]);
/*XGetWindowProperty (dpy, temp_list[i], atoms[_NET_WM_WINDOW_TYPE], //need learn more about the func.
0, G_MAXLONG, False, XA_ATOM, &actual_type, &actual_format,
&nitems, &bytes_after, &type);
@@ -76,7 +76,7 @@
}
gboolean
-om_iconify_client(Display* dpy, Window* w) {
+moko_iconify_client(Display* dpy, Window* w) {
if (dpy == NULL || w == NULL)
return FALSE;
else {
@@ -94,7 +94,7 @@
}
GdkPixbuf *
-om_get_window_icon (Display *dpy, Window w) {
+moko_get_window_icon (Display *dpy, Window w) {
Atom actual_type;
int actual_format;
unsigned long nitems, bytes_after;
@@ -138,7 +138,7 @@
}
gchar *
-om_get_window_name (Display *dpy, Window w) {
+moko_get_window_name (Display *dpy, Window w) {
Atom actual_type;
int actual_format;
unsigned long nitems, bytes_after;
@@ -173,7 +173,7 @@
void
-om_print_win_list (Display* dpy, Window* win_list, guint win_num) {
+moko_print_win_list (Display* dpy, Window* win_list, guint win_num) {
int i;
char* winname = NULL;
@@ -181,13 +181,13 @@
g_debug ("****there are %d windows in total****", win_num);
for (i=0; i<win_num; i++) {
- winname = om_get_window_name(dpy, win_list[i]);
+ winname = moko_get_window_name(dpy, win_list[i]);
g_debug ("%d. %s ", i, winname);
}
}
Atom
-om_get_window_property (Display *dpy, Window w, Atom property) {
+moko_get_window_property (Display *dpy, Window w, Atom property) {
Atom result = None;
Atom actual_type;
int actual_format;
@@ -211,7 +211,7 @@
}
guint
-om_tab_event_check (Display *dpy) {
+moko_tab_event_check (Display *dpy) {
XEvent ev;
guint done = 0;
Bool clicked = FALSE;
@@ -235,7 +235,7 @@
gboolean
-om_get_current_active_client(Display *dpy, Window *window_return) {
+moko_get_current_active_client(Display *dpy, Window *window_return) {
Atom actual_type, type;
unsigned char* prop = NULL;
int actual_format;
@@ -296,7 +296,7 @@
gboolean
-om_send_delete_message (Display *dpy, Window w) {
+moko_send_delete_message (Display *dpy, Window w) {
XEvent e;
e.type = ClientMessage;
@@ -315,7 +315,7 @@
}
gboolean
-om_really_kill_client (Display *dpy, Window w) {
+moko_really_kill_client (Display *dpy, Window w) {
gdk_error_trap_push ();
XKillClient (dpy, w);
@@ -326,7 +326,7 @@
}
gboolean
-om_kill_window (Display *dpy, Window w){
+moko_kill_window (Display *dpy, Window w){
Atom *protocols;
int count, rc;
@@ -343,20 +343,20 @@
}
XFree (protocols);
if (delete_supported)
- return om_send_delete_message (dpy, w);
+ return moko_send_delete_message (dpy, w);
}
- return om_really_kill_client (dpy, w);
+ return moko_really_kill_client (dpy, w);
}
/*void
-om_update_wlist(Display *dpy, Window **list, guint *amount)
+moko_update_wlist(Display *dpy, Window **list, guint *amount)
{
Window *new_list;
guint new_amount;
int i,j;
- om_update_net_undocked_client_list(dpy, &new_list, &new_amount);
+ moko_update_net_undocked_client_list(dpy, &new_list, &new_amount);
- om_print_win_list(dpy, new_list, new_amount);
+ moko_print_win_list(dpy, new_list, new_amount);
for (i=0; i<new_amount; i++)
{
Modified: trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/misc.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/misc.h 2007-01-10 12:50:44 UTC (rev 534)
+++ trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/misc.h 2007-01-11 09:39:15 UTC (rev 535)
@@ -53,39 +53,38 @@
gboolean
-om_X_ev_init (Display *dpy,GtkWidget *gtkwidget);
+moko_X_ev_init (Display *dpy,GtkWidget *gtkwidget);
gboolean
-om_update_net_undocked_client_list (Display* dpy, Window** list, guint* nr);
+moko_update_net_undocked_client_list (Display* dpy, Window** list, guint* nr);
GdkPixbuf *
-om_get_window_icon (Display *dpy, Window w);
+moko_get_window_icon (Display *dpy, Window w);
gchar *
-om_get_window_name (Display *dpy, Window w);
+moko_get_window_name (Display *dpy, Window w);
void
-om_print_win_list (Display* dpy, Window* win_list, guint win_num);
+moko_print_win_list (Display* dpy, Window* win_list, guint win_num);
Atom
-om_get_window_property (Display *dpy, Window w, Atom property);
+moko_get_window_property (Display *dpy, Window w, Atom property);
gboolean
-om_get_current_active_client (Display* dpy, Window* window_return);
+moko_get_current_active_client (Display* dpy, Window* window_return);
void
mbcommand(Display *dpy, int cmd_id, Window win, char *data);
gboolean
-om_active_next_client (Display* dpy);
+moko_active_next_client (Display* dpy);
gboolean
-om_kill_window (Display *dpy, Window w);
+moko_kill_window (Display *dpy, Window w);
/********/
-// the functions below have not implemented.
gboolean
-om_set_atoms_name(const char** src_name, int src_num);
+moko_set_atoms_name(const char** src_name, int src_num);
#endif/*misc.h*/
Modified: trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/popupmenu.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/popupmenu.c 2007-01-10 12:50:44 UTC (rev 534)
+++ trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/popupmenu.c 2007-01-11 09:39:15 UTC (rev 535)
@@ -20,21 +20,21 @@
#include "popupmenu.h"
void
-om_kill_task_cb(GtkMenuItem *item, List *l) {
+moko_kill_task_cb(GtkMenuItem *item, MokoTaskList *l) {
g_debug ("kill task cb");
- //om_wm_cmd(item, l->mokolist_view, MB_CMD_REMOVE_CLIENT);
- om_wm_cmd(item, l->list_view, MB_CMD_REMOVE_CLIENT);
+ //moko_wm_cmd(item, l->mokolist_view, MB_CMD_REMOVE_CLIENT);
+ moko_wm_cmd(item, l->list_view, MB_CMD_REMOVE_CLIENT);
}
void
-om_kill_and_swith_cb(GtkMenuItem *item, List *l) {
+moko_kill_and_swith_cb(GtkMenuItem *item, MokoTaskList *l) {
g_debug ("call kill and switch task function");
- //om_wm_cmd(item, l->mokolist_view, MB_CMD_REMOVE_AND_ACTIVE);
- om_wm_cmd(item, l->list_view, MB_CMD_REMOVE_AND_ACTIVE);
+ //moko_wm_cmd(item, l->mokolist_view, MB_CMD_REMOVE_AND_ACTIVE);
+ moko_wm_cmd(item, l->list_view, MB_CMD_REMOVE_AND_ACTIVE);
}
void
-om_init_popup_menu (GtkWidget *my_widget, GdkEventButton *event, List *l) {
+moko_init_popup_menu (GtkWidget *my_widget, GdkEventButton *event, MokoTaskList *l) {
GtkWidget *menu;
GtkMenuItem *item;
int button, event_time;
@@ -47,11 +47,11 @@
item = gtk_menu_item_new_with_label ("Close and switch");
gtk_widget_show (item);
gtk_menu_prepend (menu, item);
- g_signal_connect (item, "activate", G_CALLBACK (om_kill_and_swith_cb), l);
+ g_signal_connect (item, "activate", G_CALLBACK (moko_kill_and_swith_cb), l);
item = gtk_menu_item_new_with_label ("Kill the Application");
gtk_widget_show (item);
gtk_menu_prepend (menu, item);
- g_signal_connect (item, "activate", G_CALLBACK (om_kill_task_cb), l);
+ g_signal_connect (item, "activate", G_CALLBACK (moko_kill_task_cb), l);
if (event) {
button = event->button;
event_time = event->time;
Modified: trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/popupmenu.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/popupmenu.h 2007-01-10 12:50:44 UTC (rev 534)
+++ trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/popupmenu.h 2007-01-11 09:39:15 UTC (rev 535)
@@ -25,4 +25,8 @@
#include "list_view.h"
#include "misc.h"
+void
+moko_init_popup_menu (GtkWidget *my_widget, GdkEventButton *event, MokoTaskList *l);
+
+
#endif
Modified: trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/taskmanager.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/taskmanager.c 2007-01-10 12:50:44 UTC (rev 534)
+++ trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/taskmanager.c 2007-01-11 09:39:15 UTC (rev 535)
@@ -26,75 +26,171 @@
#include <glib.h>
#include <gtk/gtk.h>
#include <gdk/gdk.h>
-#include <gdk/gdkx.h> // GDK_WINDOW_XWINDOW
+#include <gdk/gdkx.h> // GDK_WINDOW_XWINDOW
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <signal.h>
+#include "callbacks.h"
+
#define OPAQUE 0x55555555
/* set the widget's transparency to opacity
* opacity is guint 0x00000000-0xffffffff
*/
+#define LOCK_FILE "/tmp/moko-taskmanager.lock"
+static MokoTaskManager *tm;
+static void
+handle_sigusr1 (int value)
+{
+ if (!tm)
+ return;
+
+ gtk_widget_show_all (GTK_WIDGET (tm->window));
+ gtk_window_present (GTK_WIDGET (tm->window));
+ gtk_widget_show (GTK_WIDGET (tm->wheel));
+ gtk_widget_show (GTK_WIDGET (tm->toolbox));
+
+ signal (SIGUSR1, handle_sigusr1);
+ return;
+}
+
+static pid_t
+testlock (char *fname)
+{
+ int fd;
+ struct flock fl;
+
+ fd = open (fname, O_WRONLY, S_IWUSR);
+ if (fd < 0)
+ {
+ if (errno == ENOENT)
+ {
+ return 0;
+ }
+ else
+ {
+ perror ("Test lock open file");
+ return -1;
+ }
+ }
+
+ fl.l_type = F_WRLCK;
+ fl.l_whence = SEEK_SET;
+ fl.l_start = 0;
+ fl.l_len = 0;
+
+ if (fcntl (fd, F_GETLK, &fl) < 0)
+ {
+ close (fd);
+ return -1;
+ }
+ close (fd);
+
+ if (fl.l_type == F_UNLCK)
+ return 0;
+
+ return fl.l_pid;
+}
+
+static void
+setlock (char *fname)
+{
+ int fd;
+ struct flock fl;
+
+ fd = open (fname, O_WRONLY|O_CREAT, S_IWUSR);
+ if (fd < 0)
+ {
+ perror ("Set lock open file");
+ return ;
+ }
+
+ fl.l_type = F_WRLCK;
+ fl.l_whence = SEEK_SET;
+ fl.l_start = 0;
+ fl.l_len = 0;
+
+ if (fcntl (fd, F_SETLK, &fl) < 0)
+ {
+ perror ("Lock file");
+ close (fd);
+ }
+}
+
int
-gtk_widget_set_transparency(GtkWidget *widget, guint opacity) {
- Display *display;
- Window window;
- Window parent_win;
- Window root_win;
- Window* child_windows;
- int num_child_windows;
+gtk_widget_set_transparency(GtkWidget *widget, guint opacity)
+{
+ Display *display;
+ Window window;
+ Window parent_win;
+ Window root_win;
+ Window* child_windows;
+ int num_child_windows;
- if(!GTK_IS_WIDGET(widget)){
+ if(!GTK_IS_WIDGET(widget)){
printf("gtk_widget_set_transparency: not a widget!\n");
return -1;
- }
+ }
- if(widget->window == NULL){
+ if(widget->window == NULL){
printf("gtk_widget_set_transparency: please init widget before set transparency!\n");
return -1;
- }
+ }
- /* Set the Display and Screen */
- display = (Display*)gdk_x11_get_default_xdisplay();
- /* sync, so the window manager can know the new widget */
- XSync(display, False);
- window = GDK_WINDOW_XWINDOW(widget->window);
+ /* Set the Display and Screen */
+ display = (Display*)gdk_x11_get_default_xdisplay();
+ /* sync, so the window manager can know the new widget */
+ XSync(display, False);
+ window = GDK_WINDOW_XWINDOW(widget->window);
- /* Get the cureent window's top-level window */
- while(1){
- XQueryTree(display, window,
- &root_win,
- &parent_win,
- &child_windows, &num_child_windows);
- XFree(child_windows);
- /* found the top-level window */
- if(root_win == parent_win) break;
- window = parent_win;
- }
+ /* Get the cureent window's top-level window */
+ while(1){
+ XQueryTree(display, window,
+ &root_win,
+ &parent_win,
+ &child_windows, &num_child_windows);
+ XFree(child_windows);
+ /* found the top-level window */
+ if(root_win == parent_win) break;
+ window = parent_win;
+ }
- if(opacity == OPAQUE){
- XDeleteProperty(display, window,
- XInternAtom(display, "_NET_WM_WINDOW_OPACITY", False));
- }else{
- XChangeProperty(display, window,
+ if(opacity == OPAQUE){
+ XDeleteProperty(display, window,
+ XInternAtom(display, "_NET_WM_WINDOW_OPACITY", False));
+ }
+ else{
+ XChangeProperty(display, window,
XInternAtom(display, "_NET_WM_WINDOW_OPACITY", False),
XA_CARDINAL, 32, PropModeReplace,
(unsigned char *) &opacity, 1L);
- }
+ }
- XSync(display, False);
+ XSync(display, False);
- return 0;
+ return 0;
}
int
-main (int argc, char** argv) {
- //GtkWidget *taskmanager; //main window
- MokoTaskManager *tm;
+main (int argc, char** argv)
+{
Display *dpy;
- //List *list;
+ GtkWidget *image;
+ pid_t lockapp;
+ lockapp = testlock (LOCK_FILE);
+ if (lockapp > 0)
+ {
+ kill (lockapp, SIGUSR1);
+ return 0;
+ }
+ setlock (LOCK_FILE);
+
tm = g_malloc (sizeof (MokoTaskManager));
-
memset (tm, 0, sizeof (MokoTaskManager));
gtk_init (&argc, &argv);
@@ -103,47 +199,65 @@
tm->app = MOKO_APPLICATION(moko_application_get_instance());
g_set_application_name( "Openmoko-taskmanager" );
- /* tm->gtk_window = gtk_window_new (GTK_WINDOW_POPUP);//It is a popup window
- gtk_window_set_title (tm->gtk_window, _("Task Manager"));
- gtk_widget_set_uposition (tm->gtk_window, TASK_MANAGER_PROPERTY_X, TASK_MANAGER_PROPERTY_Y);
- gtk_window_set_default_size (tm->gtk_window, TASK_MANAGER_PROPERTY_WIDTH, TASK_MANAGER_PROPERTY_HEIGHT);
- gtk_widget_show (tm->gtk_window);
-*/
+ /* finger based window */
tm->window = MOKO_FINGER_WINDOW(moko_finger_window_new());
- tm->wheel = moko_finger_wheel_new();
- //moko_finger_wheel_show(tm->wheel);
- tm->toolbox = moko_finger_window_get_toolbox(tm->window);
+// gtk_window_set_decorated (mma->window, FALSE);
+ gtk_widget_show (GTK_WIDGET (tm->window));
- tm->close = moko_finger_tool_box_add_button( tm->toolbox );
- gtk_widget_show (tm->close);
- tm->close_all = moko_finger_tool_box_add_button( tm->toolbox );
- gtk_widget_show (tm->close_all);
- tm->quit = moko_finger_tool_box_add_button( tm->toolbox );
- gtk_widget_show (tm->quit);
-
- tm->l = LIST(list_new());
- om_update_store_list(dpy, tm->l->list_store);
- om_set_list_highlight(dpy, tm->l);
- gtk_widget_show (tm->l);
+ /* finger wheel object*/
+ tm->wheel = moko_finger_window_get_wheel (tm->window);
+
+ /* finger toolbox object*/
+ tm->toolbox = moko_finger_window_get_toolbox (tm->window);
+
+ tm->go_to = moko_finger_tool_box_add_button_without_label (tm->toolbox);
+ image = gtk_image_new_from_file (PKGDATADIR"/close_all.png");
+ moko_pixmap_button_set_finger_toolbox_btn_center_image (tm->go_to, image);
+ tm->kill = moko_finger_tool_box_add_button_without_label (tm->toolbox);
+ image = gtk_image_new_from_file (PKGDATADIR"/close.png");
+ moko_pixmap_button_set_finger_toolbox_btn_center_image (tm->kill, image);
+ tm->kill_all = moko_finger_tool_box_add_button_without_label (tm->toolbox);
+ image = gtk_image_new_from_file (PKGDATADIR"/close_all.png");
+ moko_pixmap_button_set_finger_toolbox_btn_center_image (tm->kill_all, image);
+ tm->quit = moko_finger_tool_box_add_button_without_label (tm->toolbox);
+ image = gtk_image_new_from_file (PKGDATADIR"/exit.png");
+ moko_pixmap_button_set_finger_toolbox_btn_center_image (tm->quit, image);
+
+ tm->l = moko_task_list_new();
+ moko_update_store_list(dpy, tm->l->list_store);
+ //moko_set_list_highlight(dpy, tm->l);
+ gtk_widget_show (GTK_WIDGET (tm->l));
- //gtk_container_add (tm->gtk_window, GTK_WIDGET (tm->l));
moko_finger_window_set_contents (tm->window, GTK_WIDGET(tm->l));
+ g_signal_connect (tm->go_to, "clicked",
+ G_CALLBACK (moko_go_to_btn_cb), tm);
+ g_signal_connect (tm->kill, "clicked",
+ G_CALLBACK (moko_kill_btn_cb), tm);
+ g_signal_connect (tm->kill_all, "clicked",
+ G_CALLBACK (moko_kill_all_btn_cb), tm);
+ g_signal_connect (tm->quit, "clicked",
+ G_CALLBACK (moko_quit_btn_cb), tm);
+ g_signal_connect (tm->wheel, "press_left_up",
+ G_CALLBACK (moko_wheel_left_up_press_cb), tm);
+ g_signal_connect (tm->wheel, "press_right_down",
+ G_CALLBACK (moko_wheel_right_down_press_cb), tm);
+ g_signal_connect (tm->wheel, "press_bottom",
+ G_CALLBACK (moko_wheel_bottom_press_cb), tm);
- g_signal_connect (tm->l->btn_close, "clicked", gtk_main_quit, NULL);
-//g_signal_connect (G_OBJECT (list->list_view), "cursor-changed", G_CALLBACK (om_cursor_changed),
-// GTK_TREE_MODEL (list->list_store));
- g_signal_connect (G_OBJECT (tm->l->tab), "clicked", G_CALLBACK (om_tab_event_cb), tm->l);
- g_signal_connect (G_OBJECT (tm->l->tabhold), "clicked", G_CALLBACK (om_hold_event_cb), tm->l);
-
- gdk_window_add_filter (NULL, om_window_filter, tm->l);
+ gdk_window_add_filter (NULL, moko_window_filter, tm->l);
XSelectInput (dpy, DefaultRootWindow (dpy), PropertyChangeMask);
- gtk_widget_set_transparency(tm->window, 50);
+ signal (SIGUSR1, handle_sigusr1);
- gtk_widget_show_all (tm->window);
+ //gtk_widget_set_transparency(tm->window, 50);
+ gtk_widget_show_all (GTK_WIDGET (tm->window));
+ gtk_widget_show (GTK_WIDGET (tm->wheel));
+ gtk_widget_show (GTK_WIDGET (tm->toolbox));
+
gtk_main();
-
- g_free (tm);
+
+ if (tm)
+ g_free (tm);
}
Modified: trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/taskmanager.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/taskmanager.h 2007-01-10 12:50:44 UTC (rev 534)
+++ trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/taskmanager.h 2007-01-11 09:39:15 UTC (rev 535)
@@ -24,13 +24,14 @@
#include <libmokoui/moko-finger-tool-box.h>
#include <libmokoui/moko-finger-window.h>
#include <libmokoui/moko-finger-wheel.h>
+#include <libmokoui/moko-pixmap-button.h>
+
#include <gtk/gtk.h>
#include <gdk/gdk.h>
#include <X11/Xlib.h>
#include "list_view.h"
-#include "callbacks.h"
//#ifndef GTK_STOCK_CLOSE
//#define GTK_STOCK_CLOSE "button_colse"
@@ -52,13 +53,13 @@
GtkWidget *gtk_window;//??
MokoFingerWheel *wheel;
MokoFingerToolBox *toolbox;
+ MokoTaskList *l;
+
+ MokoPixmapButton *go_to;
+ MokoPixmapButton *kill;
+ MokoPixmapButton *kill_all;
+ MokoPixmapButton *quit;
- GtkButton *close;
- GtkButton *close_all;
- GtkButton *quit;
-
-//template
- List *l;
};
#endif /*taskmanager.h*/
Modified: trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/xatoms.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/xatoms.c 2007-01-10 12:50:44 UTC (rev 534)
+++ trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/xatoms.c 2007-01-11 09:39:15 UTC (rev 535)
@@ -50,7 +50,7 @@
*@return Bool
*/
gboolean
-om_initialize_X_atoms(const Display* dpy) {
+moko_initialize_X_atoms(const Display* dpy) {
if (g_Atom_initialized == TRUE)
return TRUE;
if (dpy ==NULL)
Modified: trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/xatoms.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/xatoms.h 2007-01-10 12:50:44 UTC (rev 534)
+++ trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/xatoms.h 2007-01-11 09:39:15 UTC (rev 535)
@@ -50,6 +50,6 @@
Atom atoms[MAX_ATOM_NO];
gboolean
-om_initialize_X_atoms(const Display* dpy);
+moko_initialize_X_atoms(const Display* dpy);
#endif /*xatoms.h*/
More information about the commitlog
mailing list