Index: xftaskbar.c =================================================================== RCS file: /var/cvs/xfce/xfce4/xfce-utils/xftaskbar/xftaskbar.c,v retrieving revision 1.45 diff -u -r1.45 xftaskbar.c --- xftaskbar.c 28 Jan 2004 20:43:15 -0000 1.45 +++ xftaskbar.c 8 Feb 2004 10:31:27 -0000 @@ -1,6 +1,6 @@ /* xftaskbar * Copyright (C) 2003 Olivier Fourdan (fourdan@xfce.org) - * Copyright (c) 2003 Benedikt Meurer + * Copyright (c) 2003,2004 Benedikt Meurer * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public @@ -51,6 +51,7 @@ #define TOP TRUE #define BOTTOM FALSE #define DEFAULT_HEIGHT 30 +#define DEFAULT_WIDTH_PERCENT 100 static McsClient *client = NULL; @@ -62,6 +63,7 @@ int scr; guint x, y, width, height; + guint width_percent; gint hide_timeout; gint unhide_timeout; gboolean position; @@ -141,6 +143,16 @@ return taskbar->height; } +static gint taskbar_get_width(Taskbar *taskbar) +{ + return (taskbar->width * taskbar->width_percent) / 100.0; +} + +static gint taskbar_get_x(Taskbar *taskbar) +{ + return taskbar->x + (taskbar->width - taskbar_get_width(taskbar)) / 2; +} + static void taskbar_update_margins(Taskbar *taskbar) { DesktopMargins margins; @@ -166,7 +178,7 @@ static void taskbar_position(Taskbar *taskbar) { g_return_if_fail (taskbar != NULL); - gtk_widget_set_size_request(GTK_WIDGET(taskbar->win), taskbar->width, taskbar_get_height(taskbar)); + gtk_widget_set_size_request(GTK_WIDGET(taskbar->win), taskbar_get_width(taskbar), taskbar_get_height(taskbar)); } static void taskbar_toggle_autohide(Taskbar *taskbar) @@ -261,7 +273,6 @@ static void taskbar_change_size(Taskbar *taskbar, int height) { - g_return_if_fail (taskbar != NULL); if (taskbar->height != height) { taskbar->height = height; @@ -271,6 +282,17 @@ } } +static void taskbar_set_width_percent(Taskbar *taskbar, int width_percent) +{ + if (taskbar->width_percent != width_percent) + { + taskbar->width_percent = width_percent; + gtk_widget_set_size_request(GTK_WIDGET(taskbar->win), + taskbar_get_width(taskbar), + taskbar->height); + } +} + static gboolean taskbar_size_allocate (GtkWidget *widget, GtkAllocation *allocation, gpointer data) { Taskbar *taskbar = (Taskbar *) data; @@ -286,7 +308,7 @@ { taskbar->y = MyDisplayMaxY(taskbar->dpy, taskbar->scr, 0, 0) - allocation->height; } - gtk_window_move(GTK_WINDOW(taskbar->win), taskbar->x, taskbar->y); + gtk_window_move(GTK_WINDOW(taskbar->win), taskbar_get_x(taskbar), taskbar->y); } return FALSE; } @@ -426,6 +448,10 @@ { taskbar_change_size(taskbar, setting->data.v_int); } + else if (!strcmp(name, "Taskbar/WidthPercent")) + { + taskbar_set_width_percent(taskbar, setting->data.v_int); + } } break; case MCS_ACTION_DELETED: @@ -467,7 +493,8 @@ * with Xrandr */ taskbar->width = gdk_screen_get_width(screen); - gtk_widget_set_size_request(GTK_WIDGET(taskbar->win), taskbar->width, + gtk_widget_set_size_request(GTK_WIDGET(taskbar->win), + taskbar_get_width(taskbar), taskbar->height); taskbar_change_size(taskbar, taskbar->height); } @@ -515,6 +542,7 @@ taskbar->unhide_timeout = 0; taskbar->x = left; taskbar->width = MyDisplayWidth(taskbar->dpy, taskbar->scr, 0, 0) - left - right; + taskbar->width_percent = DEFAULT_WIDTH_PERCENT; taskbar->y = MyDisplayY(0, 0); taskbar->height = 1; taskbar->position = TOP; Index: plugin/xftaskbar_plugin.c =================================================================== RCS file: /var/cvs/xfce/xfce4/xfce-utils/xftaskbar/plugin/xftaskbar_plugin.c,v retrieving revision 1.21 diff -u -r1.21 xftaskbar_plugin.c --- plugin/xftaskbar_plugin.c 22 Jul 2003 19:50:23 -0000 1.21 +++ plugin/xftaskbar_plugin.c 8 Feb 2004 10:31:27 -0000 @@ -14,6 +14,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. xfce4 mcs plugin - (c) 2002 Olivier Fourdan + (c) 2004 Benedikt Meurer */ @@ -48,6 +49,7 @@ #define TOP TRUE #define BOTTOM FALSE #define DEFAULT_HEIGHT 30 +#define DEFAULT_WIDTH_PERCENT 100 #define DEFAULT_ICON_SIZE 48 @@ -62,6 +64,7 @@ static gboolean show_tray = TRUE; static gboolean all_tasks = FALSE; static int height = DEFAULT_HEIGHT; +static int width_percent = DEFAULT_WIDTH_PERCENT; typedef struct _Itf Itf; struct _Itf @@ -87,6 +90,10 @@ GtkWidget *label14; GtkWidget *label15; GtkWidget *label16; + GtkWidget *width_scale; + GtkWidget *width_label_top; + GtkWidget *width_label_left; + GtkWidget *width_label_right; GtkWidget *pager_checkbutton; GtkWidget *tray_checkbutton; GtkWidget *pos_bottom_radiobutton; @@ -183,6 +190,20 @@ write_options(mcs_plugin); } +static void cb_width_percent_changed(GtkWidget *dialog, gpointer user_data) +{ + Itf *itf = (Itf *) user_data; + McsPlugin *mcs_plugin = itf->mcs_plugin; + + width_percent = (int)gtk_range_get_value(GTK_RANGE(itf->width_scale)); + + mcs_manager_set_int(mcs_plugin->manager, "Taskbar/WidthPercent", + CHANNEL, width_percent); + + mcs_manager_notify(mcs_plugin->manager, CHANNEL); + write_options(mcs_plugin); +} + Itf *create_xftaskbar_dialog(McsPlugin * mcs_plugin) { Itf *dialog; @@ -294,6 +315,50 @@ gtk_scale_set_digits (GTK_SCALE (dialog->height_scale), 0); gtk_range_set_update_policy (GTK_RANGE (dialog->height_scale), GTK_UPDATE_DISCONTINUOUS); + dialog->width_label_top = gtk_label_new (_("Width:")); + gtk_widget_show (dialog->width_label_top); + gtk_table_attach (GTK_TABLE (dialog->table3), dialog->width_label_top, + 0, 3, 2, 3, + (GtkAttachOptions) (GTK_FILL), + (GtkAttachOptions) (0), 0, 0); + gtk_label_set_justify (GTK_LABEL (dialog->width_label_top), + GTK_JUSTIFY_LEFT); + gtk_misc_set_alignment (GTK_MISC (dialog->width_label_top), 0, 0.5); + + dialog->width_label_left = small_label(_("Small")); + gtk_widget_show (dialog->width_label_left); + gtk_table_attach (GTK_TABLE (dialog->table3), dialog->width_label_left, + 0, 1, 3, 4, + (GtkAttachOptions) (GTK_FILL), + (GtkAttachOptions) (0), 0, 0); + gtk_label_set_use_markup (GTK_LABEL (dialog->width_label_left), TRUE); + gtk_label_set_justify (GTK_LABEL (dialog->width_label_left), + GTK_JUSTIFY_LEFT); + gtk_misc_set_alignment (GTK_MISC (dialog->width_label_left), 1, 0.5); + + dialog->width_label_right = small_label(_("Large")); + gtk_widget_show (dialog->width_label_right); + gtk_table_attach (GTK_TABLE (dialog->table3), dialog->width_label_right, + 2, 3, 3, 4, + (GtkAttachOptions) (GTK_FILL), + (GtkAttachOptions) (0), 0, 0); + gtk_label_set_use_markup (GTK_LABEL (dialog->width_label_right), TRUE); + gtk_label_set_justify (GTK_LABEL (dialog->width_label_right), + GTK_JUSTIFY_LEFT); + gtk_misc_set_alignment (GTK_MISC (dialog->width_label_right), 0, 0.5); + + dialog->width_scale = gtk_hscale_new (GTK_ADJUSTMENT ( + gtk_adjustment_new (width_percent, 20, 110, 10, 10, 10))); + gtk_widget_show (dialog->width_scale); + gtk_table_attach (GTK_TABLE (dialog->table3), dialog->width_scale, + 1, 2, 3, 4, + (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), + (GtkAttachOptions) (GTK_FILL), 0, 0); + gtk_scale_set_draw_value (GTK_SCALE (dialog->width_scale), FALSE); + gtk_scale_set_digits (GTK_SCALE (dialog->width_scale), 0); + gtk_range_set_update_policy (GTK_RANGE (dialog->width_scale), + GTK_UPDATE_DISCONTINUOUS); + dialog->vbox2 = gtk_vbox_new (TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (dialog->vbox2), BORDER); gtk_widget_show (dialog->vbox2); @@ -348,6 +413,7 @@ g_signal_connect(G_OBJECT(itf->alltasks_checkbutton), "toggled", G_CALLBACK(cb_alltasks_changed), itf); g_signal_connect(G_OBJECT(itf->autohide_checkbutton), "toggled", G_CALLBACK(cb_autohide_changed), itf); g_signal_connect(G_OBJECT(itf->height_scale), "value_changed", G_CALLBACK(cb_height_changed), itf); + g_signal_connect(G_OBJECT(itf->width_scale), "value_changed", G_CALLBACK(cb_width_percent_changed), itf); gtk_window_set_position (GTK_WINDOW (itf->xftaskbar_dialog), GTK_WIN_POS_CENTER); gtk_widget_show(itf->xftaskbar_dialog); @@ -454,6 +520,17 @@ height = DEFAULT_HEIGHT; mcs_manager_set_int(mcs_plugin->manager, "Taskbar/Height", CHANNEL, height); } + + setting = mcs_manager_setting_lookup(mcs_plugin->manager, "Taskbar/WidthPercent", CHANNEL); + if(setting) + { + width_percent = setting->data.v_int; + } + else + { + width_percent = DEFAULT_HEIGHT; + mcs_manager_set_int(mcs_plugin->manager, "Taskbar/WidthPercent", CHANNEL, width_percent); + } } static gboolean write_options(McsPlugin * mcs_plugin)