[Goodies-commits] r3221 - in xfce4-places-plugin/trunk: . panel-plugin
Diego Ongaro
ongardie at xfce.org
Thu Sep 13 01:03:17 CEST 2007
Author: ongardie
Date: 2007-09-12 23:03:17 +0000 (Wed, 12 Sep 2007)
New Revision: 3221
Modified:
xfce4-places-plugin/trunk/ChangeLog
xfce4-places-plugin/trunk/panel-plugin/view.c
xfce4-places-plugin/trunk/panel-plugin/view.h
Log:
2007-09-12 Diego Ongaro <ongardie at gmail.com>
* view.{c,h}: Clean-up. Improved sizing algorithm.
Modified: xfce4-places-plugin/trunk/ChangeLog
===================================================================
--- xfce4-places-plugin/trunk/ChangeLog 2007-09-12 21:39:41 UTC (rev 3220)
+++ xfce4-places-plugin/trunk/ChangeLog 2007-09-12 23:03:17 UTC (rev 3221)
@@ -2,6 +2,7 @@
* cfg.h: Don't define recent documents settings if compiled w/o.
* cfg.{c,h}: Clean-up, added more assertions
+ * view.{c,h}: Clean-up. Improved sizing algorithm.
2007-09-11 Diego Ongaro <ongardie at gmail.com>
Modified: xfce4-places-plugin/trunk/panel-plugin/view.c
===================================================================
--- xfce4-places-plugin/trunk/panel-plugin/view.c 2007-09-12 21:39:41 UTC (rev 3220)
+++ xfce4-places-plugin/trunk/panel-plugin/view.c 2007-09-12 23:03:17 UTC (rev 3221)
@@ -50,10 +50,6 @@
#include "model_volumes.h"
#include "model_user.h"
-
-
-#define BORDER 4
-
struct _PlacesView
{
/* plugin */
@@ -80,8 +76,6 @@
gchar *label_tooltip_text;
gboolean force_update_theme;
-
-
/* model */
GList *bookmark_groups;
};
@@ -98,9 +92,9 @@
places_debug_menu_timeout_count == 1); \
if(pd != NULL){ \
if(places_debug_menu_timeout_count == 0) \
- g_assert(pd->menu_timeout_id == 0); \
+ g_assert(pd->menu_timeout_id == 0); \
else \
- g_assert(pd->menu_timeout_id > 0); \
+ g_assert(pd->menu_timeout_id > 0); \
} \
}G_STMT_END
@@ -147,29 +141,39 @@
/********** Model Management **********/
static void
-pview_reconfigure_model(PlacesView *view)
+pview_destroy_model(PlacesView *view)
{
+ GList *bookmark_group_li;
+ PlacesBookmarkGroup *bookmark_group;
+
/* we don't want the menu items holding on to any references */
pview_destroy_menu(view);
-
- /* destroy first */
+
if(view->bookmark_groups != NULL){
- GList *bookmark_group = view->bookmark_groups;
- while(bookmark_group != NULL){
- DBG("finalize: %x", (gint) bookmark_group->data);
+ bookmark_group_li = view->bookmark_groups;
+ do{
+ if(bookmark_group_li->data != NULL){
+ bookmark_group = (PlacesBookmarkGroup*) bookmark_group_li->data;
+ places_bookmark_group_finalize(bookmark_group);
+ }
- if(bookmark_group->data != NULL)
- places_bookmark_group_finalize((PlacesBookmarkGroup*) bookmark_group->data);
+ bookmark_group_li = bookmark_group_li->next;
- bookmark_group = bookmark_group->next;
- }
+ }while(bookmark_group_li != NULL);
g_list_free(view->bookmark_groups);
view->bookmark_groups = NULL;
}
- /* now create */
+}
+
+static void
+pview_reconfigure_model(PlacesView *view)
+{
+ pview_destroy_model(view);
+
+ /* now re-create it */
view->bookmark_groups = g_list_append(view->bookmark_groups, places_bookmarks_system_create());
if(view->cfg->show_volumes)
@@ -185,14 +189,17 @@
pview_model_changed(GList *bookmark_groups)
{
gboolean ret = FALSE;
- GList *bookmark_group = bookmark_groups;
+ GList *bookmark_group_li = bookmark_groups;
+ PlacesBookmarkGroup *bookmark_group;
- while(bookmark_group != NULL){
+ while(bookmark_group_li != NULL){
- if(bookmark_group->data != NULL)
- ret = places_bookmark_group_changed((PlacesBookmarkGroup*) bookmark_group->data) || ret;
+ if(bookmark_group_li->data != NULL){
+ bookmark_group = (PlacesBookmarkGroup*) bookmark_group_li->data;
+ ret = places_bookmark_group_changed(bookmark_group) || ret;
+ }
- bookmark_group = bookmark_group->next;
+ bookmark_group_li = bookmark_group_li->next;
}
return ret;
@@ -204,10 +211,11 @@
/* Panel callbacks */
static gboolean
-pview_cb_size_changed(PlacesView *pd, gint wsize)
+pview_cb_size_changed(PlacesView *pd)
{
g_assert(pd != NULL);
g_assert(pd->button != NULL);
+
if(GTK_WIDGET_REALIZED(pd->button))
pview_button_update(pd);
@@ -232,13 +240,6 @@
pview_destroy_menu(view);
}
-static void
-pview_cb_orientation_changed(PlacesView *view, GtkOrientation orientation, XfcePanelPlugin *panel)
-{
- DBG("orientation changed");
- pview_button_update(view);
-}
-
/* Menu callbacks */
static gboolean /* return false to stop calling it */
pview_cb_menu_timeout(PlacesView *pd){
@@ -254,15 +255,16 @@
PLACES_DEBUG_MENU_TIMEOUT_COUNT(0);
return TRUE;
-
+
+
killtimeout:
- if(pd->menu_timeout_id){
- pd->menu_timeout_id = 0;
- PLACES_DEBUG_MENU_TIMEOUT_COUNT(-1);
- }else{
- PLACES_DEBUG_MENU_TIMEOUT_COUNT(0);
- }
- return FALSE;
+ if(pd->menu_timeout_id){
+ pd->menu_timeout_id = 0;
+ PLACES_DEBUG_MENU_TIMEOUT_COUNT(-1);
+ }else{
+ PLACES_DEBUG_MENU_TIMEOUT_COUNT(0);
+ }
+ return FALSE;
}
@@ -370,6 +372,8 @@
static void
pview_cb_menu_item_context_act(GtkWidget *item, PlacesView *pd)
{
+ PlacesBookmarkAction *action;
+
g_assert(pd != NULL);
g_assert(pd->menu != NULL && GTK_IS_WIDGET(pd->menu));
@@ -378,7 +382,7 @@
while(g_main_context_iteration(NULL, FALSE))
/* no op */;
- PlacesBookmarkAction *action = (PlacesBookmarkAction*) g_object_get_data(G_OBJECT(item), "action");
+ action = (PlacesBookmarkAction*) g_object_get_data(G_OBJECT(item), "action");
DBG("Calling action %s", action->label);
places_bookmark_action_call(action);
@@ -392,7 +396,6 @@
GtkWidget *context, *context_item;
PlacesBookmarkAction *action;
-
if(actions != NULL){
context = gtk_menu_new();
@@ -416,7 +419,8 @@
NULL, NULL,
0, gtk_get_current_event_time());
- g_signal_connect_swapped(context, "deactivate", G_CALLBACK(pview_open_menu), pd);
+ g_signal_connect_swapped(context, "deactivate",
+ G_CALLBACK(pview_open_menu), pd);
}
@@ -442,6 +446,7 @@
gboolean ctrl = (event->state & GDK_CONTROL_MASK) &&
!(event->state & (GDK_MOD1_MASK|GDK_SHIFT_MASK|GDK_MOD4_MASK));
gboolean sensitive = GTK_WIDGET_IS_SENSITIVE(gtk_bin_get_child(GTK_BIN(menu_item)));
+
if(event->button == 3 || (event->button == 1 && (ctrl || !sensitive)))
return pview_cb_menu_item_do_alt(pd, menu_item);
else
@@ -469,27 +474,30 @@
}
#endif
+
/********** Model Visitor Callbacks **********/
static void
pview_load_thunar_wrapper(PlacesBookmarkAction *act)
{
g_assert(act != NULL);
+
+ /* we stored the path in priv */
places_load_thunar((gchar*) act->priv);
}
-
-
static void
pview_load_terminal_wrapper(PlacesBookmarkAction *act)
{
g_assert(act != NULL);
+
+ /* we stored the path in priv */
places_load_terminal((gchar*) act->priv);
}
+/********** UI Helpers **********/
-/********** UI Helpers **********/
static void
pview_destroy_menu(PlacesView *view)
{
@@ -571,6 +579,11 @@
static void
pview_update_menu(PlacesView *pd)
{
+ GList *bookmark_group_li;
+ PlacesBookmarkGroup *bookmark_group;
+ GList *bookmarks;
+ PlacesBookmark *bookmark;
+
#if USE_RECENT_DOCUMENTS
GtkWidget *recent_menu;
GtkWidget *clear_item;
@@ -584,21 +597,20 @@
pd->menu = gtk_menu_new();
/* make sure the menu popups up in right screen */
- gtk_menu_set_screen (GTK_MENU (pd->menu),
- gtk_widget_get_screen (GTK_WIDGET (pd->plugin)));
+ gtk_menu_set_screen(GTK_MENU(pd->menu),
+ gtk_widget_get_screen(pd->button));
- GList *bookmark_group = pd->bookmark_groups;
- GList *bookmarks;
- PlacesBookmark *bookmark;
- while(bookmark_group != NULL){
+ bookmark_group_li = pd->bookmark_groups;
+ while(bookmark_group_li != NULL){
- if(bookmark_group->data == NULL){ /* separator */
+ if(bookmark_group_li->data == NULL){ /* separator */
pd->needs_separator = TRUE;
}else{
- bookmarks = places_bookmark_group_get_bookmarks((PlacesBookmarkGroup*) bookmark_group->data);
+ bookmark_group = (PlacesBookmarkGroup*) bookmark_group_li->data;
+ bookmarks = places_bookmark_group_get_bookmarks(bookmark_group);
while(bookmarks != NULL){
bookmark = (PlacesBookmark*) bookmarks->data;
@@ -610,7 +622,7 @@
}
- bookmark_group = bookmark_group->next;
+ bookmark_group_li = bookmark_group_li->next;
}
/* Recent Documents */
@@ -695,7 +707,7 @@
pview_update_menu(pd);
/* toggle the button */
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (pd->button), TRUE);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(pd->button), TRUE);
/* Register this menu (for focus, transparency, auto-hide, etc) */
/* We don't want to register if the menu is visible (hasn't been deactivated) */
@@ -730,9 +742,9 @@
{
GtkWidget *box;
if(orientation == GTK_ORIENTATION_HORIZONTAL)
- box = gtk_hbox_new(FALSE, BORDER);
+ box = gtk_hbox_new(FALSE, 4);
else
- box = gtk_vbox_new(FALSE, BORDER);
+ box = gtk_vbox_new(FALSE, 4);
gtk_container_set_border_width(GTK_CONTAINER(box), 0);
gtk_widget_show(box);
return box;
@@ -845,25 +857,27 @@
if(size_changed || icon_presence_changed || label_presence_changed || theme_changed){
view->size = xfce_panel_plugin_get_size(view->plugin);
- DBG("size: %d", view->size);
+ DBG("Panel size: %d", view->size);
view->show_button_icon = cfg->show_button_icon;
view->show_button_label = cfg->show_button_label;
GdkPixbuf *icon;
- gint size, width, height;
- gint pix_w = 0, pix_h = 0;
+ gint width, height;
+ gint button_overhead_size, box_overhead_size;
GtkWidget *button_box = gtk_bin_get_child(GTK_BIN(view->button));
- DBG("button thickness (%d, %d)", view->button->style->xthickness, view->button->style->ythickness);
- size = view->size - 2 - 2 * MAX(view->button->style->xthickness,
- view->button->style->ythickness);
+ button_overhead_size = 2 + 2 * MAX(view->button->style->xthickness,
+ view->button->style->ythickness);
+ box_overhead_size = 0;
+ width = 0;
+ height = 0;
if(view->show_button_icon){
- icon = xfce_themed_icon_load_category(2, size);
+ icon = xfce_themed_icon_load_category(2, view->size - button_overhead_size);
if(G_LIKELY(icon != NULL)){
- pix_w = gdk_pixbuf_get_width(icon);
- pix_h = gdk_pixbuf_get_height(icon);
+ width = MAX(gdk_pixbuf_get_width(icon), view->size - button_overhead_size);
+ height = MAX(gdk_pixbuf_get_height(icon), view->size - button_overhead_size);
if(view->button_image == NULL){
view->button_image = g_object_ref(gtk_image_new_from_pixbuf(icon));
@@ -886,16 +900,7 @@
g_object_unref(view->button_image);
view->button_image = NULL;
}
- DBG("button thickness (%d, %d)", view->button->style->xthickness, view->button->style->ythickness);
- DBG("view->size=%d, size=%d", view->size, size);
- width = pix_w + (view->size - size);
- height = pix_h + (view->size - size);
- if(view->orientation == GTK_ORIENTATION_HORIZONTAL)
- height = MAX(width, size);
- else
- width = MAX(height, size);
-
if(view->show_button_label){
GtkRequisition req;
@@ -911,13 +916,14 @@
}
gtk_widget_size_request(view->button_label, &req);
- DBG("label wants width: %d, width is now: %d", req.width, width);
- if(view->orientation == GTK_ORIENTATION_HORIZONTAL)
- width += req.width + BORDER;
- else {
- width = MAX(width, req.width + 2 + 2 * view->button->style->xthickness);
- height += req.height + BORDER;
+ if(view->orientation == GTK_ORIENTATION_HORIZONTAL){
+ width += req.width;
+ height = MAX(height, req.height);
+ }else{
+ width = MAX(width, req.width);
+ height += req.height;
}
+
}else if(view->button_label != NULL){
g_assert(GTK_IS_WIDGET(view->button_label));
gtk_widget_destroy(view->button_label);
@@ -925,16 +931,24 @@
view->button_label = NULL;
}
+ width += button_overhead_size;
+ height += button_overhead_size;
+
if(view->button_image != NULL && view->button_label != NULL){
- gint delta = gtk_box_get_spacing(GTK_BOX(button_box));
+ box_overhead_size = gtk_box_get_spacing(GTK_BOX(button_box));
if(view->orientation == GTK_ORIENTATION_HORIZONTAL)
- width += delta;
+ width += box_overhead_size;
else
- height += delta;
+ height += box_overhead_size;
}
+ if(view->orientation == GTK_ORIENTATION_HORIZONTAL)
+ height = MAX(height, view->size);
+ else
+ width = MAX(width, view->size);
+
DBG("width=%d, height=%d", width, height);
gtk_widget_set_size_request(view->button, width, height);
}
@@ -943,8 +957,6 @@
gtk_tooltips_set_tip(view->tooltips, view->button, view->label_tooltip_text, NULL);
}
-
-
static void
pview_cfg_dialog_close_cb(GtkDialog *dialog, gint response, PlacesView *view)
{
@@ -1030,7 +1042,7 @@
g_signal_connect_swapped(G_OBJECT(view->plugin), "size-changed",
G_CALLBACK(pview_cb_size_changed), view);
g_signal_connect_swapped(G_OBJECT(view->plugin), "orientation-changed",
- G_CALLBACK(pview_cb_orientation_changed), view);
+ G_CALLBACK(pview_button_update), view);
/* button signal */
g_signal_connect_swapped(view->button, "button-press-event",
@@ -1052,6 +1064,7 @@
places_view_finalize(PlacesView *view)
{
pview_destroy_menu(view);
+ pview_destroy_model(view);
if(view->button_image != NULL)
g_object_unref(view->button_image);
@@ -1063,22 +1076,10 @@
g_free(view->label_tooltip_text);
g_object_unref(view->tooltips);
- if(view->bookmark_groups != NULL){
- GList *bookmark_group = view->bookmark_groups;
- while(bookmark_group != NULL){
- if(bookmark_group->data != NULL)
- places_bookmark_group_finalize((PlacesBookmarkGroup*) bookmark_group->data);
- bookmark_group = bookmark_group->next;
- }
- g_list_free(view->bookmark_groups);
- view->bookmark_groups = NULL;
- }
-
places_cfg_view_iface_finalize(view->cfg_iface);
g_free(view->view_cfg_iface);
g_free(view);
}
-
/* vim: set ai et tabstop=4: */
Modified: xfce4-places-plugin/trunk/panel-plugin/view.h
===================================================================
--- xfce4-places-plugin/trunk/panel-plugin/view.h 2007-09-12 21:39:41 UTC (rev 3220)
+++ xfce4-places-plugin/trunk/panel-plugin/view.h 2007-09-12 23:03:17 UTC (rev 3221)
@@ -58,9 +58,11 @@
#include "cfg.h"
/* Init & Finalize */
-PlacesView* places_view_init(XfcePanelPlugin*);
-void places_view_finalize(PlacesView*);
+PlacesView*
+places_view_init(XfcePanelPlugin*);
+void
+places_view_finalize(PlacesView*);
#endif
/* vim: set ai et tabstop=4: */
More information about the Goodies-commits
mailing list