X-Git-Url: http://pileus.org/git/?p=grits;a=blobdiff_plain;f=src%2Fobjects%2Fgrits-object.c;h=55f39754d498cf7d4f93c0ca8116d06d376effdb;hp=e9a7a0ad482309359e1c03f883bf0f50d3e7f15a;hb=67a63167629adc48ff31530dd58ece577f3d7460;hpb=420f1ea8e4aea5dd7bddc77325ab643900c34cd5 diff --git a/src/objects/grits-object.c b/src/objects/grits-object.c index e9a7a0a..55f3975 100644 --- a/src/objects/grits-object.c +++ b/src/objects/grits-object.c @@ -111,7 +111,7 @@ void grits_object_pickdraw(GritsObject *object, GritsOpenGL *opengl, gboolean pi } /* Save state, draw, restore state */ - g_mutex_lock(opengl->sphere_lock); + g_mutex_lock(&opengl->sphere_lock); if (!(object->skip & GRITS_SKIP_STATE)) { glPushAttrib(GL_ALL_ATTRIB_BITS); glMatrixMode(GL_PROJECTION); glPushMatrix(); @@ -134,7 +134,7 @@ void grits_object_pickdraw(GritsObject *object, GritsOpenGL *opengl, gboolean pi glMatrixMode(GL_PROJECTION); glPopMatrix(); glMatrixMode(GL_MODELVIEW); glPopMatrix(); } - g_mutex_unlock(opengl->sphere_lock); + g_mutex_unlock(&opengl->sphere_lock); } /** @@ -163,7 +163,20 @@ 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) +{ + // Used by grits OpenGL + 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 */ @@ -205,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) {