]> Pileus Git - grits/blobdiff - src/plugins/test.c
Add grits_object_destroy functions and fix memory leaks
[grits] / src / plugins / test.c
index b5ab621fa43705f465f9c1c5936d0c96e26aa1de..8d12dc1172faec9fe1736cc3b919af511077c821 100644 (file)
 
 #include "test.h"
 
-static void on_poly_enter(GritsPoly *poly)
+static gboolean on_poly_enter(GritsPoly *poly)
 {
        g_debug("GritsPluginTest: on_poly_enter");
        poly->color[3] = 0.50;
        grits_object_queue_draw(GRITS_OBJECT(poly));
+       return FALSE;
 }
 
-static void on_poly_leave(GritsPoly *poly)
+static gboolean on_poly_leave(GritsPoly *poly)
 {
        g_debug("GritsPluginTest: on_poly_leave");
        poly->color[3] = 0.2;
        grits_object_queue_draw(GRITS_OBJECT(poly));
+       return FALSE;
 }
 
-static void on_poly_button(GritsPoly *poly, GdkEventButton *event)
+static gboolean on_poly_button(GritsPoly *poly, GdkEventButton *event)
 {
        g_debug("GritsPluginTest: on_poly_button");
        static int i = 0;
@@ -56,44 +58,32 @@ static void on_poly_button(GritsPoly *poly, GdkEventButton *event)
        int idx = i++ % G_N_ELEMENTS(colors);
        memcpy(poly->color, colors[idx], sizeof(gdouble)*3);
        grits_object_queue_draw(GRITS_OBJECT(poly));
+       return TRUE;
 }
 
-static void on_poly_key(GritsPoly *poly, GdkEventKey *event)
+static gboolean on_poly_key(GritsPoly *poly, GdkEventKey *event)
 {
        g_debug("GritsPluginTest: on_poly_key - %d", event->keyval);
        gdouble colors[0xff][3] = {
-               [GDK_r] {1, 0, 0},
-               [GDK_g] {0, 1, 0},
-               [GDK_b] {0, 0, 1},
+               [GDK_KEY_r] {1, 0, 0},
+               [GDK_KEY_g] {0, 1, 0},
+               [GDK_KEY_b] {0, 0, 1},
        };
        if (event->keyval >= G_N_ELEMENTS(colors))
-               return;
+               return FALSE;
        int key = event->keyval;
        memcpy(poly->color, colors[key], sizeof(gdouble)*3);
        grits_object_queue_draw(GRITS_OBJECT(poly));
+       return TRUE;
 }
 
-static void on_marker_enter(GritsMarker *marker, GritsViewer *viewer)
-{
-       g_debug("GritsPluginTest: on_marker_enter");
-       GdkWindow *window = gtk_widget_get_window(GTK_WIDGET(viewer));
-       GdkCursor *cursor = gdk_cursor_new(GDK_HAND2);
-       gdk_window_set_cursor(window, cursor);
-}
-
-static void on_marker_leave(GritsMarker *marker, GritsViewer *viewer)
-{
-       g_debug("GritsPluginTest: on_marker_leave");
-       GdkWindow *window = gtk_widget_get_window(GTK_WIDGET(viewer));
-       gdk_window_set_cursor(window, NULL);
-}
-
-static void on_marker_button(GritsMarker *marker, GdkEventButton *event)
+static gboolean on_marker_button(GritsMarker *marker, GdkEventButton *event)
 {
        g_debug("GritsPluginTest: on_marker_button");
        GtkWidget *dialog = gtk_dialog_new_with_buttons(
                        "St. Charles!", NULL, 0, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL);
        gtk_dialog_run(GTK_DIALOG(dialog));
+       return TRUE;
 }
 
 /***********
@@ -106,9 +96,8 @@ void _load_marker(GritsPluginTest *test)
        GRITS_OBJECT(test->marker)->center.lon  = -90.491982;
        GRITS_OBJECT(test->marker)->center.elev =   0.0;
        GRITS_OBJECT(test->marker)->lod         = EARTH_R*3;
+       grits_object_set_cursor(GRITS_OBJECT(test->marker), GDK_HAND2);
        grits_viewer_add(test->viewer, GRITS_OBJECT(test->marker), GRITS_LEVEL_HUD, FALSE);
-       g_signal_connect(test->marker, "enter",   G_CALLBACK(on_marker_enter),  test->viewer);
-       g_signal_connect(test->marker, "leave",   G_CALLBACK(on_marker_leave),  test->viewer);
        g_signal_connect(test->marker, "clicked", G_CALLBACK(on_marker_button), test->viewer);
 }
 
@@ -186,11 +175,12 @@ static void grits_plugin_test_dispose(GObject *_test)
        g_debug("GritsPluginTest: dispose");
        GritsPluginTest *test = GRITS_PLUGIN_TEST(_test);
        if (test->viewer) {
-               grits_viewer_remove(test->viewer, GRITS_OBJECT(test->marker));
-               grits_viewer_remove(test->viewer, GRITS_OBJECT(test->poly));
-               grits_viewer_remove(test->viewer, GRITS_OBJECT(test->line));
-               g_object_unref(test->viewer);
+               GritsViewer *viewer = test->viewer;
                test->viewer = NULL;
+               grits_object_destroy_pointer(&test->marker);
+               grits_object_destroy_pointer(&test->poly);
+               grits_object_destroy_pointer(&test->line);
+               g_object_unref(viewer);
        }
        G_OBJECT_CLASS(grits_plugin_test_parent_class)->dispose(_test);
 }