diff src/audacious/ui_skinned_textbox.c @ 3137:19908efce4e5 trunk

one mutex is enough for resizing
author Tomasz Mon <desowin@gmail.com>
date Sat, 21 Jul 2007 20:25:56 +0200
parents f1c756f39e6c
children bb7f5adc1677
line wrap: on
line diff
--- a/src/audacious/ui_skinned_textbox.c	Sat Jul 21 20:13:01 2007 +0200
+++ b/src/audacious/ui_skinned_textbox.c	Sat Jul 21 20:25:56 2007 +0200
@@ -34,8 +34,6 @@
 #define UI_SKINNED_TEXTBOX_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), ui_skinned_textbox_get_type(), UiSkinnedTextboxPrivate))
 typedef struct _UiSkinnedTextboxPrivate UiSkinnedTextboxPrivate;
 
-static GMutex *mutex = NULL;
-
 #define TEXTBOX_SCROLL_SMOOTH_TIMEOUT  30
 #define TEXTBOX_SCROLL_WAIT            80
 
@@ -167,7 +165,6 @@
 
 static void ui_skinned_textbox_init(UiSkinnedTextbox *textbox) {
     UiSkinnedTextboxPrivate *priv = UI_SKINNED_TEXTBOX_GET_PRIVATE(textbox);
-    mutex = g_mutex_new();
     priv->resize_width = 0;
     priv->resize_height = 0;
     priv->move_x = 0;
@@ -252,7 +249,6 @@
 }
 
 static void ui_skinned_textbox_size_allocate(GtkWidget *widget, GtkAllocation *allocation) {
-    g_mutex_lock(mutex);
     UiSkinnedTextbox *textbox = UI_SKINNED_TEXTBOX (widget);
     UiSkinnedTextboxPrivate *priv = UI_SKINNED_TEXTBOX_GET_PRIVATE(textbox);
 
@@ -262,21 +258,23 @@
     if (GTK_WIDGET_REALIZED (widget))
         gdk_window_move_resize(widget->window, widget->allocation.x, widget->allocation.y, allocation->width, allocation->height);
 
+    if (textbox->x + priv->move_x == widget->allocation.x/(priv->double_size ? 2 : 1))
+        priv->move_x = 0;
+    if (textbox->y + priv->move_y == widget->allocation.y/(priv->double_size ? 2 : 1))
+        priv->move_y = 0;
     textbox->x = widget->allocation.x/(priv->double_size ? 2 : 1);
     textbox->y = widget->allocation.y/(priv->double_size ? 2 : 1);
-    priv->move_x = 0;
-    priv->move_y = 0;
 
     if (textbox->width != widget->allocation.width/(priv->double_size ? 2 : 1)) {
+        if (textbox->width + priv->resize_width == widget->allocation.width/(priv->double_size ? 2 : 1))
+            priv->resize_width = 0;
         textbox->width = widget->allocation.width/(priv->double_size ? 2 : 1);
-        priv->resize_width = 0;
         priv->resize_height = 0;
         if (priv->pixmap_text) g_free(priv->pixmap_text);
         priv->pixmap_text = NULL;
         priv->offset = 0;
         gtk_widget_queue_draw(GTK_WIDGET(textbox));
     }
-    g_mutex_unlock(mutex);
 }
 
 static gboolean ui_skinned_textbox_expose(GtkWidget *widget, GdkEventExpose *event) {
@@ -431,7 +429,6 @@
 }
 
 static void ui_skinned_textbox_redraw(UiSkinnedTextbox *textbox) {
-    g_mutex_lock(mutex);
     UiSkinnedTextboxPrivate *priv = UI_SKINNED_TEXTBOX_GET_PRIVATE(textbox);
 
     if (priv->resize_width || priv->resize_height)
@@ -442,7 +439,6 @@
         gtk_fixed_move(GTK_FIXED(priv->fixed), GTK_WIDGET(textbox), textbox->x+priv->move_x, textbox->y+priv->move_y);
 
     gtk_widget_queue_draw(GTK_WIDGET(textbox));
-    g_mutex_unlock(mutex);
 }
 
 static gboolean ui_skinned_textbox_should_scroll(UiSkinnedTextbox *textbox) {
@@ -886,17 +882,13 @@
 }
 
 void ui_skinned_textbox_move_relative(GtkWidget *widget, gint x, gint y) {
-    g_mutex_lock(mutex);
     UiSkinnedTextboxPrivate *priv = UI_SKINNED_TEXTBOX_GET_PRIVATE(widget);
     priv->move_x += x;
     priv->move_y += y;
-    g_mutex_unlock(mutex);
 }
 
 void ui_skinned_textbox_resize_relative(GtkWidget *widget, gint w, gint h) {
-    g_mutex_lock(mutex);
     UiSkinnedTextboxPrivate *priv = UI_SKINNED_TEXTBOX_GET_PRIVATE(widget);
     priv->resize_width += w;
     priv->resize_height += h;
-    g_mutex_unlock(mutex);
 }