all repos — tint2 @ 24f47c9c249a1449245fd96fa40ac408f6af6dec

fork of the tint2 desktop panel for my custom setup - only minimized windows across all desktops for the taskbar

tint2conf : cleanup and rotate vertical panel snapshot

git-svn-id: http://tint2.googlecode.com/svn/trunk@408 121b4492-b84c-0410-8b4c-0d4edfb3f3cc
thilor77 thilor77@121b4492-b84c-0410-8b4c-0d4edfb3f3cc
commit

24f47c9c249a1449245fd96fa40ac408f6af6dec

parent

d4a67f631b7ddf5d80bdd42f07ec98e47a7e5644

5 files changed, 89 insertions(+), 364 deletions(-)

jump to
M src/config.csrc/config.c

@@ -626,7 +626,7 @@ else if (strcmp(key, "autohide_height") == 0)

panel_autohide_height = atoi(value); else - fprintf(stderr, "tint2 : invalid option \"%s\", correct your config file\n", key); + fprintf(stderr, "tint2 : invalid option \"%s\",\n upgrade tint2 or correct your config file\n", key); if (value1) free (value1); if (value2) free (value2);
M src/tint.csrc/tint.c

@@ -177,6 +177,11 @@ imlib_context_set_drawable(panel->temp_pmap);

img = imlib_create_image_from_drawable(0, 0, 0, panel->area.width, panel->area.height, 0); imlib_context_set_image(img); + if (!panel_horizontal) { + // rotate 90° vertical panel + imlib_image_flip_horizontal(); + imlib_image_flip_diagonal(); + } imlib_save_image(path); imlib_free_image(); XFreePixmap(server.dsp, panel->temp_pmap);
M src/tint2conf/main.csrc/tint2conf/main.c

@@ -39,25 +39,13 @@ char *g_path_config = NULL;

char *g_path_dir = NULL; char *g_default_theme = NULL; int g_width, g_height; -int g_width_list, g_height_list; GtkWidget *g_window; GtkWidget *g_theme_view; -GtkCellRenderer *g_renderer; -CustomList *customlist; - -// The data columns that we export via the tree model interface -GtkListStore *g_store; -enum { COL_THEME_FILE = 0, COL_SNAPSHOT, NB_COL, }; -static void custom_list_append(const gchar *name); -#define STEP 0.01 -static gboolean increasing = TRUE; -//gboolean increase_timeout(GtkCellRenderer *renderer); static GtkUIManager *globalUIManager = NULL; static void menuAddWidget (GtkUIManager *, GtkWidget *, GtkContainer *); -static GtkWidget *create_view(); // action on menus static void menuAdd (GtkWindow * parent);

@@ -187,129 +175,6 @@

gtk_widget_show_all(g_window); gtk_main (); return 0; -} - - -GtkWidget *create_view() -{ - GtkTreeViewColumn *col; - GtkCellRenderer *renderer; - GtkWidget *view; - - g_store = gtk_list_store_new(NB_COL, G_TYPE_STRING, GDK_TYPE_PIXBUF); -// g_store = gtk_list_store_new(NB_COL, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_FLOAT); - - view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(g_store)); - gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(view), TRUE); - //gtk_tree_view_set_fixed_height_mode(GTK_TREE_VIEW(view), TRUE); - - g_object_unref(g_store); // destroy store automatically with view - - renderer = gtk_cell_renderer_text_new(); - col = gtk_tree_view_column_new(); - gtk_tree_view_column_pack_start (col, renderer, TRUE); - gtk_tree_view_column_add_attribute (col, renderer, "text", COL_THEME_FILE); - gtk_tree_view_column_set_title (col, "Theme"); - gtk_tree_view_append_column(GTK_TREE_VIEW(view),col); - - g_width_list = 200; - g_height_list = 30; - g_renderer = gtk_cell_renderer_pixbuf_new(); - g_object_set(g_renderer, "xalign", 0.0, NULL); - gtk_cell_renderer_set_fixed_size(g_renderer, g_width_list, g_height_list); - col = gtk_tree_view_column_new(); - gtk_tree_view_column_pack_start(col, g_renderer, TRUE); - gtk_tree_view_column_add_attribute(col, g_renderer, "pixbuf", COL_SNAPSHOT); - gtk_tree_view_column_set_title(col, "Snapshot"); - gtk_tree_view_append_column(GTK_TREE_VIEW(view),col); -/* - renderer = custom_list_new(); - col = gtk_tree_view_column_new(); - gtk_tree_view_column_pack_start (col, renderer, TRUE); - gtk_tree_view_column_add_attribute (col, renderer, "snapshot", COL_SNAPSHOT); - gtk_tree_view_column_set_title (col, "Snapshot"); - gtk_tree_view_append_column(GTK_TREE_VIEW(view),col); -*/ - //g_timeout_add(50, (GSourceFunc) increase_timeout, NULL); - - return view; -} - - -/* -gboolean increase_timeout (GtkCellRenderer *renderer) -{ - GtkTreeIter iter; - gfloat perc = 0.0; - //gchar buf[20]; - - gtk_tree_model_get_iter_first(GTK_TREE_MODEL(g_store), &iter); - - gtk_tree_model_get (GTK_TREE_MODEL(g_store), &iter, COL_SNAPSHOT, &perc, -1); - - if ( perc > (1.0-STEP) || (perc < STEP && perc > 0.0) ) - { - increasing = (!increasing); - } - - if (increasing) - perc = perc + STEP; - else - perc = perc - STEP; - - //g_snprintf(buf, sizeof(buf), "%u %%", (guint)(perc*100)); - - gtk_list_store_set (g_store, &iter, COL_SNAPSHOT, perc, -1); - - return TRUE; -} -*/ -/***************************************************************************** - * - * custom_list_append_record: Empty lists are boring. This function can - * be used in your own code to add rows to the - * list. Note how we emit the "row-inserted" - * signal after we have appended the row - * internally, so the tree view and other - * interested objects know about the new row. - * - *****************************************************************************/ - -void custom_list_append(const gchar *name) -{ - GtkTreeIter iter; - gchar *snap, *cmd; - gint pixWidth, pixHeight; - gboolean changeSize = FALSE; - GdkPixbuf *icon; - - // build panel's snapshot - snap = g_build_filename (g_get_user_config_dir(), "tint2", "snap.jpg", NULL); - cmd = g_strdup_printf("tint2 -c %s -s %s", name, snap); - system(cmd); - g_free(cmd); - - // load - icon = gdk_pixbuf_new_from_file(snap, NULL); - g_free(snap); - if (!icon) - return; - - pixWidth = gdk_pixbuf_get_width(icon); - pixHeight = gdk_pixbuf_get_height(icon); - if (g_width_list < pixWidth) { - g_width_list = pixWidth; - changeSize = TRUE; - } - if (g_height_list < (pixHeight+6)) { - g_height_list = pixHeight+6; - changeSize = TRUE; - } - if (changeSize) - gtk_cell_renderer_set_fixed_size(g_renderer, g_width_list, g_height_list); - - gtk_list_store_append(g_store, &iter); - gtk_list_store_set(g_store, &iter, COL_THEME_FILE, name, COL_SNAPSHOT, icon, -1); }
M src/tint2conf/theme_view.csrc/tint2conf/theme_view.c

@@ -1,234 +1,117 @@

#include "theme_view.h" - -enum { PROP_PERCENTAGE = 1, PROP_THEME, PROP_SNAPSHOT, }; - -static gpointer parent_class = NULL; - -static void custom_list_init(CustomList *cellprogress); -static void custom_list_class_init(CustomListClass *klass); -static void custom_list_get_property(GObject *object, guint param_id, GValue *value, GParamSpec *pspec); -static void custom_list_set_property(GObject *object, guint param_id, const GValue *value, GParamSpec *pspec); -static void custom_list_finalize(GObject *gobject); +// The data columns that we export via the tree model interface +GtkListStore *g_store; +int g_width_list, g_height_list; +GtkCellRenderer *g_renderer; -// These functions are the heart of our custom cell renderer -static void custom_list_get_size(GtkCellRenderer *cell, GtkWidget *widget, GdkRectangle *cell_area, gint *x_offset, gint *y_offset, gint *width, gint *height); -static void custom_list_render(GtkCellRenderer *cell, GdkWindow *window, GtkWidget *widget, GdkRectangle *background_area, GdkRectangle *cell_area, GdkRectangle *expose_area, guint flags); - - -// register our type with the GObject type system if we haven't done so yet. -// Everything else is done in the callbacks. -GType custom_list_get_type() +GtkWidget *create_view() { - static GType type = 0; + GtkTreeViewColumn *col; + GtkCellRenderer *renderer; + GtkWidget *view; - if (type) - return type; + g_store = gtk_list_store_new(NB_COL, G_TYPE_STRING, GDK_TYPE_PIXBUF); - if (1) { - static const GTypeInfo cell_info = - { - sizeof (CustomListClass), - NULL, - NULL, - (GClassInitFunc)custom_list_class_init, - NULL, - NULL, - sizeof (CustomList), - 0, - (GInstanceInitFunc)custom_list_init, - }; + view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(g_store)); + gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(view), TRUE); + gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(view), FALSE); - // Derive from GtkCellRenderer - type = g_type_register_static(GTK_TYPE_CELL_RENDERER, "CustomList", &cell_info, 0); - } + g_object_unref(g_store); // destroy store automatically with view - return type; -} + renderer = gtk_cell_renderer_text_new(); + col = gtk_tree_view_column_new(); + gtk_tree_view_column_pack_start(col, renderer, TRUE); + gtk_tree_view_column_add_attribute(col, renderer, "text", COL_THEME_FILE); + gtk_tree_view_column_set_visible(col, FALSE); + gtk_tree_view_append_column(GTK_TREE_VIEW(view),col); + g_width_list = 200; + g_height_list = 30; + g_renderer = gtk_cell_renderer_pixbuf_new(); + g_object_set(g_renderer, "xalign", 0.0, NULL); + gtk_cell_renderer_set_fixed_size(g_renderer, g_width_list, g_height_list); + // specific to gtk-2.18 or higher + //gtk_cell_renderer_set_padding(g_renderer, 5, 5); + col = gtk_tree_view_column_new(); + gtk_tree_view_column_pack_start(col, g_renderer, TRUE); + gtk_tree_view_column_add_attribute(col, g_renderer, "pixbuf", COL_SNAPSHOT); + gtk_tree_view_append_column(GTK_TREE_VIEW(view),col); -// klass initialisation -// - override the parent's functions that we need to implement. -// - declare our property -// - If you want cells that are editable, you need to override 'activate' and 'start_editing'. -static void custom_list_class_init(CustomListClass *klass) -{ - GtkCellRendererClass *cell_class = GTK_CELL_RENDERER_CLASS(klass); - GObjectClass *object_class = G_OBJECT_CLASS(klass); + //g_timeout_add(50, (GSourceFunc) increase_timeout, NULL); -printf("custom_list_class_init : deb\n"); - parent_class = g_type_class_peek_parent (klass); - - cell_class->render = custom_list_render; - cell_class->get_size = custom_list_get_size; - object_class->get_property = custom_list_get_property; - object_class->set_property = custom_list_set_property; - object_class->finalize = custom_list_finalize; - - // Install our very own properties - g_object_class_install_property(object_class, PROP_PERCENTAGE, g_param_spec_double("percentage", "Percentage", "The fractional progress to display", 0.0, 1.0, 0.0, G_PARAM_READWRITE)); - g_object_class_install_property(object_class, PROP_THEME, g_param_spec_string("theme", "Theme", "Theme file name", NULL, G_PARAM_READWRITE)); - g_object_class_install_property(object_class, PROP_SNAPSHOT, g_param_spec_string("snapshot", "Snapshot", "Snapshot file name", NULL, G_PARAM_READWRITE)); + return view; } -// CustomList renderer initialisation -static void custom_list_init(CustomList *custom_list) +void custom_list_append(const gchar *name) { - printf("custom_list_init : deb\n"); - // set some default properties of the parent (GtkCellRenderer). - GTK_CELL_RENDERER(custom_list)->mode = GTK_CELL_RENDERER_MODE_INERT; - GTK_CELL_RENDERER(custom_list)->xpad = 2; - GTK_CELL_RENDERER(custom_list)->ypad = 2; -} + GtkTreeIter iter; + gchar *snap, *cmd; + gint pixWidth, pixHeight; + gboolean changeSize = FALSE; + GdkPixbuf *icon; + // build panel's snapshot + snap = g_build_filename (g_get_user_config_dir(), "tint2", "snap.jpg", NULL); + g_remove(snap); -static void custom_list_finalize(GObject *object) -{ -/* - CustomList *cellrendererprogress = CUSTOM_LIST(object); -*/ - -printf("custom_list_finalize\n"); - // Free any dynamically allocated resources here - - (* G_OBJECT_CLASS (parent_class)->finalize) (object); -} - + cmd = g_strdup_printf("tint2 -c %s -s %s", name, snap); + system(cmd); + g_free(cmd); -static void custom_list_set_property(GObject *object, guint param_id, const GValue *value, GParamSpec *pspec) -{ - CustomList *custom_list = CUSTOM_LIST(object); + // load + icon = gdk_pixbuf_new_from_file(snap, NULL); + g_free(snap); + if (!icon) + return; - switch (param_id) { - case PROP_PERCENTAGE: - printf("custom_list_set_property : PROP_PERCENTAGE\n"); - custom_list->progress = g_value_get_double(value); - break; - - case PROP_THEME: - printf("custom_list_set_property : PROP_THEME\n"); - //if (custom_list->nameTheme) g_free(custom_list->nameTheme); - custom_list->nameTheme = g_strdup(g_value_get_string(value)); - break; - - case PROP_SNAPSHOT: - printf("custom_list_set_property : PROP_SNAPSHOT\n"); - custom_list->nameSnapshot = g_strdup(g_value_get_string(value)); - break; - - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID(object, param_id, pspec); - break; + pixWidth = gdk_pixbuf_get_width(icon); + pixHeight = gdk_pixbuf_get_height(icon); + if (g_width_list < pixWidth) { + g_width_list = pixWidth; + changeSize = TRUE; } -} - - -static void custom_list_get_property(GObject *object, guint param_id, GValue *value, GParamSpec *psec) -{ - CustomList *custom_list = CUSTOM_LIST(object); - - switch (param_id) { - case PROP_PERCENTAGE: - printf("custom_list_get_property : PROP_PERCENTAGE\n"); - g_value_set_double(value, custom_list->progress); - break; - - case PROP_THEME: - printf("custom_list_get_property : PROP_THEME\n"); - g_value_set_string(value, g_strdup(custom_list->nameTheme)); - break; - - case PROP_SNAPSHOT: - printf("custom_list_get_property : PROP_SNAPSHOT\n"); - g_value_set_string(value, g_strdup(custom_list->nameSnapshot)); - break; - //g_value_set_object (value, (GObject *)priv->image); - - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, psec); - break; + if (g_height_list < (pixHeight+6)) { + g_height_list = pixHeight+6; + changeSize = TRUE; } -} - + if (changeSize) + gtk_cell_renderer_set_fixed_size(g_renderer, g_width_list, g_height_list); -GtkCellRenderer *custom_list_new() -{ - return g_object_new(CUSTOM_LIST_TYPE, NULL); + gtk_list_store_append(g_store, &iter); + gtk_list_store_set(g_store, &iter, COL_THEME_FILE, name, COL_SNAPSHOT, icon, -1); } - -/*************************************************************************** - * - * custom_cell_renderer_progress_get_size: crucial - calculate the size - * of our cell, taking into account - * padding and alignment properties - * of parent. - * - ***************************************************************************/ - -#define FIXED_WIDTH 100 -#define FIXED_HEIGHT 20 - -static void custom_list_get_size(GtkCellRenderer *cell, GtkWidget *widget, GdkRectangle *cell_area, gint *x_offset, gint *y_offset, gint *width, gint *height) +/* +gboolean increase_timeout (GtkCellRenderer *renderer) { - gint calc_width; - gint calc_height; + GtkTreeIter iter; + gfloat perc = 0.0; + //gchar buf[20]; - calc_width = (gint) cell->xpad * 2 + FIXED_WIDTH; - calc_height = (gint) cell->ypad * 2 + FIXED_HEIGHT; + gtk_tree_model_get_iter_first(GTK_TREE_MODEL(g_store), &iter); - if (width) - *width = calc_width; + gtk_tree_model_get (GTK_TREE_MODEL(g_store), &iter, COL_SNAPSHOT, &perc, -1); - if (height) - *height = calc_height; + if ( perc > (1.0-STEP) || (perc < STEP && perc > 0.0) ) + { + increasing = (!increasing); + } - if (cell_area) { - if (x_offset) { - *x_offset = cell->xalign * (cell_area->width - calc_width); - *x_offset = MAX (*x_offset, 0); - } + if (increasing) + perc = perc + STEP; + else + perc = perc - STEP; - if (y_offset) { - *y_offset = cell->yalign * (cell_area->height - calc_height); - *y_offset = MAX (*y_offset, 0); - } - } -} + //g_snprintf(buf, sizeof(buf), "%u %%", (guint)(perc*100)); - -/*************************************************************************** - * - * custom_cell_renderer_progress_render: crucial - do the rendering. - * - ***************************************************************************/ - -static void custom_list_render(GtkCellRenderer *cell, GdkWindow *window, GtkWidget *widget, GdkRectangle *background_area, GdkRectangle *cell_area, GdkRectangle *expose_area, guint flags) -{ - CustomList *custom_list = CUSTOM_LIST(cell); - GtkStateType state; - gint width, height; - gint x_offset, y_offset; - - //printf("custom_list_render\n"); - custom_list_get_size (cell, widget, cell_area, &x_offset, &y_offset, &width, &height); + gtk_list_store_set (g_store, &iter, COL_SNAPSHOT, perc, -1); - if (GTK_WIDGET_HAS_FOCUS (widget)) - state = GTK_STATE_ACTIVE; - else - state = GTK_STATE_NORMAL; - - width -= cell->xpad*2; - height -= cell->ypad*2; - - gtk_paint_box (widget->style, window, GTK_STATE_NORMAL, GTK_SHADOW_IN, NULL, widget, "trough", cell_area->x + x_offset + cell->xpad, cell_area->y + y_offset + cell->ypad, width - 1, height - 1); - - gtk_paint_box (widget->style, window, state, GTK_SHADOW_OUT, NULL, widget, "bar", cell_area->x + x_offset + cell->xpad, cell_area->y + y_offset + cell->ypad, width * custom_list->progress, height - 1); + return TRUE; } - - +*/
M src/tint2conf/theme_view.hsrc/tint2conf/theme_view.h

@@ -4,39 +4,11 @@ #define THEME_VIEW

#include <gtk/gtk.h> - -#define CUSTOM_LIST_TYPE (custom_list_get_type()) -#define CUSTOM_LIST(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), CUSTOM_LIST_TYPE, CustomList)) -#define CUSTOM_LIST_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUSTOM_LIST_TYPE, CustomListClass)) -#define CUSTOM_IS_LIST(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUSTOM_LIST_TYPE)) -#define CUSTOM_IS_LIST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUSTOM_LIST_TYPE)) -#define CUSTOM_LIST_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CUSTOM_LIST_TYPE, CustomListClass)) - -typedef struct _CustomList CustomList; -typedef struct _CustomListClass CustomListClass; - - -struct _CustomList -{ - GtkCellRenderer parent; - - gdouble progress; - gchar *nameTheme; - gchar *nameSnapshot; - GdkPixbuf *pixbuf; -}; +enum { COL_THEME_FILE = 0, COL_SNAPSHOT, NB_COL, }; -struct _CustomListClass -{ - GtkCellRendererClass parent_class; -}; +GtkWidget *create_view(); - -// return the type CustomList -GType custom_list_get_type(); - -// return a new cell renderer instance -GtkCellRenderer *custom_list_new(); +void custom_list_append(const gchar *name); #endif