summaryrefslogtreecommitdiff
path: root/libwnck/widgets/test-tasklist.c
diff options
context:
space:
mode:
Diffstat (limited to 'libwnck/widgets/test-tasklist.c')
-rw-r--r--libwnck/widgets/test-tasklist.c167
1 files changed, 167 insertions, 0 deletions
diff --git a/libwnck/widgets/test-tasklist.c b/libwnck/widgets/test-tasklist.c
new file mode 100644
index 0000000..9bb27ce
--- /dev/null
+++ b/libwnck/widgets/test-tasklist.c
@@ -0,0 +1,167 @@
+/* vim: set sw=2 et: */
+
+#include <libwnck/libwnck.h>
+#include <gtk/gtk.h>
+
+#include "tasklist.h"
+
+static gboolean display_all = FALSE;
+static gboolean never_group = FALSE;
+static gboolean always_group = FALSE;
+static gboolean rtl = FALSE;
+static gboolean skip_tasklist = FALSE;
+static gboolean transparent = FALSE;
+static gboolean vertical = FALSE;
+static gint icon_size = WNCK_DEFAULT_MINI_ICON_SIZE;
+static gboolean enable_scroll = TRUE;
+
+static GOptionEntry entries[] = {
+ {"always-group", 'g', 0, G_OPTION_ARG_NONE, &always_group, "Always group windows", NULL},
+ {"never-group", 'n', 0, G_OPTION_ARG_NONE, &never_group, "Never group windows", NULL},
+ {"display-all", 'a', 0, G_OPTION_ARG_NONE, &display_all, "Display windows from all workspaces", NULL},
+ {"icon-size", 'i', 0, G_OPTION_ARG_INT, &icon_size, "Icon size for tasklist", NULL},
+ {"rtl", 'r', 0, G_OPTION_ARG_NONE, &rtl, "Use RTL as default direction", NULL},
+ {"skip-tasklist", 's', 0, G_OPTION_ARG_NONE, &skip_tasklist, "Don't show window in tasklist", NULL},
+ {"vertical", 'v', 0, G_OPTION_ARG_NONE, &vertical, "Show in vertical mode", NULL},
+ {"transparent", 't', 0, G_OPTION_ARG_NONE, &transparent, "Enable Transparency", NULL},
+ {"disable-scroll", 'd', G_OPTION_FLAG_REVERSE, G_OPTION_ARG_NONE, &enable_scroll, "Disable scrolling", NULL},
+ {NULL }
+};
+
+static gboolean
+window_draw (GtkWidget *widget,
+ cairo_t *cr,
+ gpointer user_data)
+{
+ cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
+ cairo_set_source_rgba (cr, 1., 1., 1., .5);
+ cairo_fill (cr);
+
+ return FALSE;
+}
+
+static void
+window_composited_changed (GtkWidget *widget,
+ gpointer user_data)
+{
+ GdkScreen *screen;
+ gboolean composited;
+
+ screen = gdk_screen_get_default ();
+ composited = gdk_screen_is_composited (screen);
+
+ gtk_widget_set_app_paintable (widget, composited);
+}
+
+int
+main (int argc, char **argv)
+{
+ GOptionContext *ctxt;
+ WnckScreen *screen;
+ GtkWidget *win;
+ GtkWidget *frame;
+ GtkWidget *tasklist;
+
+ ctxt = g_option_context_new ("");
+ g_option_context_add_main_entries (ctxt, entries, NULL);
+ g_option_context_add_group (ctxt, gtk_get_option_group (TRUE));
+ g_option_context_parse (ctxt, &argc, &argv, NULL);
+ g_option_context_free (ctxt);
+ ctxt = NULL;
+
+ gtk_init (&argc, &argv);
+
+ if (rtl)
+ gtk_widget_set_default_direction (GTK_TEXT_DIR_RTL);
+
+ wnck_set_default_mini_icon_size (icon_size);
+ screen = wnck_screen_get_default ();
+
+ /* because the pager doesn't respond to signals at the moment */
+ wnck_screen_force_update (screen);
+
+ win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_default_size (GTK_WINDOW (win), 200, 100);
+ gtk_window_stick (GTK_WINDOW (win));
+ /* wnck_gtk_window_set_dock_type (GTK_WINDOW (win)); */
+
+ gtk_window_set_title (GTK_WINDOW (win), "Task List");
+ gtk_window_set_resizable (GTK_WINDOW (win), TRUE);
+
+ /* quit on window close */
+ g_signal_connect (G_OBJECT (win), "destroy",
+ G_CALLBACK (gtk_main_quit),
+ NULL);
+
+ tasklist = wnck_tasklist_new ();
+
+ wnck_tasklist_set_include_all_workspaces (WNCK_TASKLIST (tasklist), display_all);
+ if (always_group)
+ wnck_tasklist_set_grouping (WNCK_TASKLIST (tasklist),
+ WNCK_TASKLIST_ALWAYS_GROUP);
+ else if (never_group)
+ wnck_tasklist_set_grouping (WNCK_TASKLIST (tasklist),
+ WNCK_TASKLIST_NEVER_GROUP);
+ else
+ wnck_tasklist_set_grouping (WNCK_TASKLIST (tasklist),
+ WNCK_TASKLIST_AUTO_GROUP);
+
+ wnck_tasklist_set_scroll_enabled (WNCK_TASKLIST (tasklist), enable_scroll);
+
+ wnck_tasklist_set_middle_click_close (WNCK_TASKLIST (tasklist), TRUE);
+
+ wnck_tasklist_set_orientation (WNCK_TASKLIST (tasklist),
+ (vertical ? GTK_ORIENTATION_VERTICAL :
+ GTK_ORIENTATION_HORIZONTAL));
+
+ if (transparent)
+ {
+ GdkVisual *visual;
+
+ visual = gdk_screen_get_rgba_visual (gtk_widget_get_screen (win));
+
+ if (visual != NULL)
+ {
+ gtk_widget_set_visual (win, visual);
+
+ g_signal_connect (win, "composited-changed",
+ G_CALLBACK (window_composited_changed),
+ NULL);
+
+ /* draw even if we are not app-painted.
+ * this just makes my life a lot easier :)
+ */
+ g_signal_connect (win, "draw",
+ G_CALLBACK (window_draw),
+ NULL);
+
+ window_composited_changed (win, NULL);
+ }
+
+ wnck_tasklist_set_button_relief (WNCK_TASKLIST (tasklist),
+ GTK_RELIEF_NONE);
+ }
+
+ frame = gtk_frame_new (NULL);
+ gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
+ gtk_container_add (GTK_CONTAINER (win), frame);
+
+ gtk_container_add (GTK_CONTAINER (frame), tasklist);
+
+ gtk_widget_show (tasklist);
+ gtk_widget_show (frame);
+
+ gtk_window_move (GTK_WINDOW (win), 0, 0);
+
+ if (skip_tasklist)
+ {
+ gtk_window_set_skip_taskbar_hint (GTK_WINDOW (win), TRUE);
+ gtk_window_set_keep_above (GTK_WINDOW (win), TRUE);
+ }
+
+ gtk_widget_show (win);
+
+ gtk_main ();
+
+ return 0;
+}