]> Pileus Git - grits/blobdiff - src/objects/grits-object.c
Add grits_object_destroy functions and fix memory leaks
[grits] / src / objects / grits-object.c
index 4674e8a5f64cdb1fe9881120c17c682b48b59764..55f39754d498cf7d4f93c0ca8116d06d376effdb 100644 (file)
@@ -163,7 +163,7 @@ void grits_object_hide(GritsObject *object, gboolean hidden)
 void grits_object_queue_draw(GritsObject *object)
 {
        if (object->viewer)
-               gtk_widget_queue_draw(GTK_WIDGET(object->viewer));
+               grits_viewer_queue_draw(object->viewer);
 }
 
 void grits_object_set_cursor(GritsObject *object, GdkCursorType cursor)
@@ -172,6 +172,13 @@ void grits_object_set_cursor(GritsObject *object, GdkCursorType cursor)
        object->cursor = gdk_cursor_new(cursor);
 }
 
+void grits_object_destroy(GritsObject *object)
+{
+       if (object->viewer)
+               grits_viewer_remove(object->viewer, object);
+       g_object_unref(object);
+}
+
 /* Event handling */
 void grits_object_pick(GritsObject *object, GritsOpenGL *opengl)
 {
@@ -211,11 +218,13 @@ gboolean grits_object_event(GritsObject *object, GdkEvent *event)
 
        /* Handle button click */
        if (sig == SIG_BUTTON_PRESS)
-               object->state.clicking = TRUE;
+               object->state.clicking  = GRITS_CLICK_THRESHOLD;
+       if (sig == SIG_MOTION && object->state.clicking)
+               object->state.clicking -= 1;
        if (sig == SIG_BUTTON_RELEASE && object->state.clicking)
                g_signal_emit(object, signals[SIG_CLICKED], 0, event, &rval);
-       if (sig == SIG_BUTTON_RELEASE || sig == SIG_MOTION)
-               object->state.clicking = FALSE;
+       if (sig == SIG_BUTTON_RELEASE)
+               object->state.clicking  = 0;
 
        /* Emit this signal */
        if (rval == FALSE) {