/* vim: set sw=2 et: */ #include #include 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; WnckHandle *handle; 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); handle = wnck_handle_new (WNCK_CLIENT_TYPE_APPLICATION); wnck_handle_set_default_mini_icon_size (handle, icon_size); screen = wnck_handle_get_default_screen (handle); /* 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_with_handle (handle); 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 (); g_object_unref (handle); return 0; }