]> Pileus Git - grits/blobdiff - src/grits-viewer.c
Switch to GDK_KEY_*
[grits] / src / grits-viewer.c
index 67d25fb6027085129858af2f8bbb90739234add9..1afd2eaece9be068a2f6cec0e9bb268019a69118 100644 (file)
@@ -74,8 +74,10 @@ static void _grits_viewer_fix_rotation(GritsViewer *viewer)
 static gboolean _grits_viewer_queue_draw_cb(gpointer _viewer)
 {
        GritsViewer *viewer = _viewer;
+       g_mutex_lock(&viewer->draw_lock);
        gtk_widget_queue_draw(GTK_WIDGET(viewer));
        viewer->draw_source = 0;
+       g_mutex_unlock(&viewer->draw_lock);
        return FALSE;
 }
 
@@ -115,22 +117,22 @@ static void _grits_viewer_emit_offline(GritsViewer *viewer)
 static gboolean on_key_press(GritsViewer *viewer, GdkEventKey *event, gpointer _)
 {
        g_debug("GritsViewer: on_key_press - key=%x, state=%x, plus=%x",
-                       event->keyval, event->state, GDK_plus);
+                       event->keyval, event->state, GDK_KEY_plus);
 
        double lat, lon, elev, pan;
        grits_viewer_get_location(viewer, &lat, &lon, &elev);
        pan = MIN(elev/(EARTH_R/2), 30);
        switch (event->keyval) {
-       case GDK_Left:  case GDK_h: grits_viewer_pan(viewer,  0,  -pan, 0); break;
-       case GDK_Down:  case GDK_j: grits_viewer_pan(viewer, -pan, 0,   0); break;
-       case GDK_Up:    case GDK_k: grits_viewer_pan(viewer,  pan, 0,   0); break;
-       case GDK_Right: case GDK_l: grits_viewer_pan(viewer,  0,   pan, 0); break;
-       case GDK_minus: case GDK_o: grits_viewer_zoom(viewer, 10./9); break;
-       case GDK_plus:  case GDK_i: grits_viewer_zoom(viewer, 9./10); break;
-       case GDK_H: grits_viewer_rotate(viewer,  0, 0, -2); break;
-       case GDK_J: grits_viewer_rotate(viewer,  2, 0,  0); break;
-       case GDK_K: grits_viewer_rotate(viewer, -2, 0,  0); break;
-       case GDK_L: grits_viewer_rotate(viewer,  0, 0,  2); break;
+       case GDK_KEY_Left:  case GDK_KEY_h: grits_viewer_pan(viewer,  0,  -pan, 0); break;
+       case GDK_KEY_Down:  case GDK_KEY_j: grits_viewer_pan(viewer, -pan, 0,   0); break;
+       case GDK_KEY_Up:    case GDK_KEY_k: grits_viewer_pan(viewer,  pan, 0,   0); break;
+       case GDK_KEY_Right: case GDK_KEY_l: grits_viewer_pan(viewer,  0,   pan, 0); break;
+       case GDK_KEY_minus: case GDK_KEY_o: grits_viewer_zoom(viewer, 10./9); break;
+       case GDK_KEY_plus:  case GDK_KEY_i: grits_viewer_zoom(viewer, 9./10); break;
+       case GDK_KEY_H: grits_viewer_rotate(viewer,  0, 0, -2); break;
+       case GDK_KEY_J: grits_viewer_rotate(viewer,  2, 0,  0); break;
+       case GDK_KEY_K: grits_viewer_rotate(viewer, -2, 0,  0); break;
+       case GDK_KEY_L: grits_viewer_rotate(viewer,  0, 0,  2); break;
        }
        return FALSE;
 }
@@ -441,9 +443,11 @@ gboolean grits_viewer_get_offline(GritsViewer *viewer)
  */
 void grits_viewer_queue_draw(GritsViewer *viewer)
 {
+       g_mutex_lock(&viewer->draw_lock);
        if (!viewer->draw_source)
                viewer->draw_source = g_idle_add_full(G_PRIORITY_HIGH,
                                _grits_viewer_queue_draw_cb, viewer, NULL);
+       g_mutex_unlock(&viewer->draw_lock);
 }
 
 /***********************************
@@ -615,6 +619,8 @@ static void grits_viewer_init(GritsViewer *viewer)
        viewer->rotation[1] = 0;
        viewer->rotation[2] = 0;
 
+       g_mutex_init(&viewer->draw_lock);
+
        g_object_set(viewer, "can-focus", TRUE, NULL);
        gtk_widget_add_events(GTK_WIDGET(viewer),
                        GDK_BUTTON_PRESS_MASK |
@@ -636,13 +642,17 @@ static void grits_viewer_dispose(GObject *gobject)
 {
        g_debug("GritsViewer: dispose");
        GritsViewer *viewer = GRITS_VIEWER(gobject);
+       g_mutex_lock(&viewer->draw_lock);
        if (viewer->draw_source)
                g_source_remove(viewer->draw_source);
+       g_mutex_unlock(&viewer->draw_lock);
        G_OBJECT_CLASS(grits_viewer_parent_class)->dispose(gobject);
 }
 static void grits_viewer_finalize(GObject *gobject)
 {
        g_debug("GritsViewer: finalize");
+       GritsViewer *viewer = GRITS_VIEWER(gobject);
+       g_mutex_clear(&viewer->draw_lock);
        G_OBJECT_CLASS(grits_viewer_parent_class)->finalize(gobject);
        g_debug("GritsViewer: finalize - done");
 }