Author: rpmcruz
Date: Sun Jun 8 02:16:34 2008
New Revision: 48147
URL: http://svn.opensuse.org/viewcvs/yast?rev=48147&view=rev
Log:
* src/ygtkrichtext.h/c: bug fix 393143: cursor ownership was
not judged properly.
Modified:
trunk/gtk/ChangeLog
trunk/gtk/src/YGDialog.cc
trunk/gtk/src/ygtkrichtext.c
trunk/gtk/src/ygtkrichtext.h
Modified: trunk/gtk/ChangeLog
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/ChangeLog?rev=48147&r1=48146&r2=48147&view=diff
==============================================================================
--- trunk/gtk/ChangeLog (original)
+++ trunk/gtk/ChangeLog Sun Jun 8 02:16:34 2008
@@ -1,3 +1,8 @@
+2008-06-08 Ricardo Cruz
+
+ * src/ygtkrichtext.h/c: bug fix 393143: cursor ownership was
+ not judged properly.
+
2008-06-04 Ricardo Cruz
* src/ygtkmenubutton.c: fixed bug 396731: popup menu from the button
Modified: trunk/gtk/src/YGDialog.cc
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/YGDialog.cc?rev=48147&r1=48146&r2=48147&view=diff
==============================================================================
--- trunk/gtk/src/YGDialog.cc (original)
+++ trunk/gtk/src/YGDialog.cc Sun Jun 8 02:16:34 2008
@@ -29,6 +29,7 @@
// we keep a pointer of the child just for debugging
// (ie. dump yast tree)
YWidget *m_child;
+ GdkCursor *m_busyCursor;
public:
YGWindowCloseFn m_canClose;
@@ -43,6 +44,7 @@
m_refcount = 0;
m_child = NULL;
m_canClose = NULL;
+ m_busyCursor = NULL;
{
std::stack &stack = YDialog::_dialogStack;
@@ -106,6 +108,8 @@
{
IMPL
setChild (NULL);
+ if (m_busyCursor)
+ gdk_cursor_unref (m_busyCursor);
gtk_widget_destroy (m_widget);
g_object_unref (G_OBJECT (m_widget));
}
@@ -115,26 +119,17 @@
void normalCursor()
{
- if (GTK_WIDGET_REALIZED (m_widget)
-// trying to fix 393143
-&& GTK_WIDGET_MAPPED (m_widget)
-&& GTK_WIDGET_VISIBLE (m_widget)
-) {
- gdk_window_set_cursor (m_widget->window, NULL);
- }
+ gdk_window_set_cursor (m_widget->window, NULL);
}
void busyCursor()
{
- if (GTK_WIDGET_REALIZED (m_widget)
-// trying to fix 393143
-&& GTK_WIDGET_MAPPED (m_widget)
-&& GTK_WIDGET_VISIBLE (m_widget)
-) {
- GdkDisplay *display = gtk_widget_get_display (m_widget);
- GdkCursor *cursor = gdk_cursor_new_for_display (display, GDK_WATCH);
- gdk_window_set_cursor (m_widget->window, cursor);
+ GdkDisplay *display = gtk_widget_get_display (m_widget);
+ if (!m_busyCursor) {
+ m_busyCursor = gdk_cursor_new_for_display (display, GDK_WATCH);
+ gdk_cursor_ref (m_busyCursor);
}
+ gdk_window_set_cursor (m_widget->window, m_busyCursor);
}
void setChild (YWidget *new_child)
@@ -380,13 +375,11 @@
void YGDialog::normalCursor()
{
-if (m_window) // trying to fix bug 393143
m_window->normalCursor();
}
void YGDialog::busyCursor()
{
-if (m_window)
m_window->busyCursor();
}
Modified: trunk/gtk/src/ygtkrichtext.c
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/ygtkrichtext.c?rev=48147&r1=48146&r2=48147&view=diff
==============================================================================
--- trunk/gtk/src/ygtkrichtext.c (original)
+++ trunk/gtk/src/ygtkrichtext.c Sun Jun 8 02:16:34 2008
@@ -21,8 +21,6 @@
G_DEFINE_TYPE (YGtkRichText, ygtk_rich_text, GTK_TYPE_TEXT_VIEW)
-static GdkCursor *hand_cursor;
-static guint ref_cursor = 0;
static guint link_clicked_signal;
static GdkColor link_color = { 0, 0, 0, 0xeeee };
@@ -111,11 +109,9 @@
gtk_text_view_set_left_margin (tview, 4);
// Init link support
- if (!ref_cursor) {
- GdkDisplay *display = gtk_widget_get_display (GTK_WIDGET (rtext));
- hand_cursor = gdk_cursor_new_for_display (display, GDK_HAND1);
- }
- ref_cursor++;
+ GdkDisplay *display = gtk_widget_get_display (GTK_WIDGET (rtext));
+ rtext->hand_cursor = gdk_cursor_new_for_display (display, GDK_HAND1);
+ gdk_cursor_ref (rtext->hand_cursor);
#if GTK_CHECK_VERSION(2,10,0)
gtk_widget_style_get (GTK_WIDGET (rtext), "link_color", &link_color, NULL);
@@ -151,8 +147,7 @@
gtk_text_buffer_create_tag (buffer, "b", "weight", PANGO_WEIGHT_BOLD, NULL);
gtk_text_buffer_create_tag (buffer, "i", "style", PANGO_STYLE_ITALIC, NULL);
gtk_text_buffer_create_tag (buffer, "u", "underline", PANGO_UNDERLINE_SINGLE, NULL);
- gtk_text_buffer_create_tag (buffer, "center", "justification", GTK_JUSTIFY_CENTER,
- NULL);
+ gtk_text_buffer_create_tag (buffer, "center", "justification", GTK_JUSTIFY_CENTER, NULL);
// helpers
gtk_text_buffer_create_tag (buffer, "keyword", "background", "yellow", NULL);
}
@@ -160,29 +155,25 @@
static void ygtk_rich_text_destroy (GtkObject *object)
{
// destroy can be called multiple times, and we must ref only once
- if (ref_cursor > 0 && (--ref_cursor == 0)) {
- gdk_cursor_unref (hand_cursor);
- }
+ YGtkRichText *rtext = YGTK_RICH_TEXT (object);
+ gdk_cursor_unref (rtext->hand_cursor);
GTK_OBJECT_CLASS (ygtk_rich_text_parent_class)->destroy (object);
}
// Change the cursor to the "hands" cursor typically used by web browsers,
// if there is a link in the given position.
-static void set_cursor_if_appropriate (GtkTextView *text_view, gint x, gint y)
+static void set_cursor_if_appropriate (GtkTextView *view, gint x, gint y)
{
static gboolean hovering_over_link = FALSE;
- gboolean hovering = get_link (text_view, x, y) != NULL;
+ gboolean hovering = get_link (view, x, y) != NULL;
if (hovering != hovering_over_link) {
hovering_over_link = hovering;
-
- if (hovering_over_link)
- gdk_window_set_cursor (gtk_text_view_get_window
- (text_view, GTK_TEXT_WINDOW_TEXT), hand_cursor);
- else
- gdk_window_set_cursor (gtk_text_view_get_window
- (text_view, GTK_TEXT_WINDOW_TEXT), NULL);
- }
+ YGtkRichText *rtext = YGTK_RICH_TEXT (view);
+ GdkWindow *window = gtk_text_view_get_window (view, GTK_TEXT_WINDOW_TEXT);
+ GdkCursor *cursor = hovering ? rtext->hand_cursor : NULL;
+ gdk_window_set_cursor (window, cursor);
+ }
}
// Update the cursor image if the pointer moved.
Modified: trunk/gtk/src/ygtkrichtext.h
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/ygtkrichtext.h?rev=48147&r1=48146&r2=48147&view=diff
==============================================================================
--- trunk/gtk/src/ygtkrichtext.h (original)
+++ trunk/gtk/src/ygtkrichtext.h Sun Jun 8 02:16:34 2008
@@ -28,6 +28,8 @@
typedef struct _YGtkRichText
{
GtkTextView parent;
+ // members:
+ GdkCursor *hand_cursor;
} YGtkRichText;
typedef struct _YGtkRichTextClass
--
To unsubscribe, e-mail: yast-commit+unsubscribe@opensuse.org
For additional commands, e-mail: yast-commit+help@opensuse.org