]> Pileus Git - grits/commitdiff
Arrows/+/- only apply to drawing area
authorAndy Spencer <andy753421@gmail.com>
Mon, 25 May 2009 12:45:23 +0000 (12:45 +0000)
committerAndy Spencer <andy753421@gmail.com>
Mon, 25 May 2009 12:45:23 +0000 (12:45 +0000)
Fixed memory leak regression

Makefile.am
data/main.glade
src/Makefile.am
src/aweather-gui.c
src/plugin-radar.c

index c4043995658faa0103a9691d2a378eb810e90639..47470fb378b68ce39f695e9a8099de5c22897717 100644 (file)
@@ -4,6 +4,5 @@ MAINTAINERCLEANFILES = aclocal.m4 compile config.guess config.h.in gtk-doc.make
                        configure depcomp install-sh Makefile.in missing
 
 test: all
-       LD_LIBRARY_PATH=/usr/local/trmm/GVBOX/lib/ \
-       ./src/aweather
+       ./src/aweather -d 7
 
index eadaba0336cc8603d0b5932f23f665cf975e9dd1..38fca6222cd2d28d31945caed48c3c1933b4f599 100644 (file)
@@ -1,10 +1,8 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
-<!--Generated with glade3 3.4.5 on Mon May 25 01:31:13 2009 -->
+<!--Generated with glade3 3.4.5 on Mon May 25 12:26:08 2009 -->
 <glade-interface>
   <widget class="GtkWindow" id="window">
-    <signal name="key_press_event" handler="on_key_press"/>
-    <signal name="delete_event" handler="gtk_main_quit"/>
     <child>
       <widget class="GtkVBox" id="body">
         <property name="visible">True</property>
                         <property name="label" translatable="yes">gtk-zoom-in</property>
                         <property name="use_underline">True</property>
                         <property name="use_stock">True</property>
-                        <signal name="activate" handler="on_zoomout"/>
+                        <signal name="activate" handler="on_zoomin"/>
                       </widget>
                     </child>
                     <child>
                     <property name="width_request">600</property>
                     <property name="height_request">550</property>
                     <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="has_focus">True</property>
+                    <property name="is_focus">True</property>
+                    <property name="can_default">True</property>
+                    <property name="has_default">True</property>
+                    <property name="receives_default">True</property>
                     <property name="events">GDK_POINTER_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_STRUCTURE_MASK</property>
+                    <signal name="button_press_event" handler="on_drawing_button_press"/>
+                    <signal name="key_press_event" handler="on_drawing_key_press"/>
                   </widget>
                 </child>
                 <child>
index d05c4fbbeac4f2801f5fc2121a485ca06330ac5d..1721d9f249ce07a00cdb7620a86b72fe89598e13 100644 (file)
@@ -29,7 +29,7 @@ MAINTAINERCLEANFILES = Makefile.in
        glib-genmarshal --prefix=aweather_cclosure_marshal --header $< > $@
 
 test: all
-       ./aweather
+       ./aweather -d 7
 
 gdb: all
        gdb ./aweather
index 48fc87e24100e34f51dc53a75fe9fc941a7cf1ff..c21471fc7c52cf42bea2a9c20acc084065fdfeb8 100644 (file)
@@ -69,22 +69,36 @@ static void aweather_gui_class_init(AWeatherGuiClass *klass)
 /*************
  * Callbacks *
  *************/
-gboolean on_key_press(GtkWidget *widget, GdkEventKey *event, AWeatherGui *gui)
+gboolean on_drawing_button_press(GtkWidget *widget, GdkEventButton *event, AWeatherGui *gui)
 {
-       g_debug("AWeatherGui: on_key_press - key=%x, state=%x", event->keyval, event->state);
+       g_debug("AWeatherGui: on_drawing_button_press - Grabbing focus");
+       GtkWidget *drawing = aweather_gui_get_widget(gui, "drawing");
+       gtk_widget_grab_focus(drawing);
+       return TRUE;
+}
+gboolean on_drawing_key_press(GtkWidget *widget, GdkEventKey *event, AWeatherGui *gui)
+{
+       g_debug("AWeatherGui: on_drawing_key_press - key=%x, state=%x", event->keyval, event->state);
        AWeatherView *view = aweather_gui_get_view(gui);
        double x,y,z;
        aweather_view_get_location(view, &x, &y, &z);
-       if (event->keyval == GDK_q)
-               gtk_main_quit();
-       else if (event->keyval == GDK_r && event->state & GDK_CONTROL_MASK)
-               aweather_view_refresh(view);
-       else if (event->keyval == GDK_Right) aweather_view_pan(view,  z/10, 0, 0);
+       if      (event->keyval == GDK_Right) aweather_view_pan(view,  z/10, 0, 0);
        else if (event->keyval == GDK_Left)  aweather_view_pan(view, -z/10, 0, 0);
        else if (event->keyval == GDK_Up)    aweather_view_pan(view, 0,  z/10, 0);
        else if (event->keyval == GDK_Down)  aweather_view_pan(view, 0, -z/10, 0);
        else if (event->keyval == GDK_minus) aweather_view_zoom(view, 10./9);
        else if (event->keyval == GDK_plus)  aweather_view_zoom(view, 9./10);
+       return TRUE;
+}
+
+gboolean on_gui_key_press(GtkWidget *widget, GdkEventKey *event, AWeatherGui *gui)
+{
+       g_debug("AWeatherGui: on_gui_key_press - key=%x, state=%x", event->keyval, event->state);
+       AWeatherView *view = aweather_gui_get_view(gui);
+       if (event->keyval == GDK_q)
+               gtk_main_quit();
+       else if (event->keyval == GDK_r && event->state & GDK_CONTROL_MASK)
+               aweather_view_refresh(view);
        else if (event->keyval == GDK_Tab || event->keyval == GDK_ISO_Left_Tab) {
                GtkNotebook *tabs = GTK_NOTEBOOK(aweather_gui_get_widget(gui, "tabs"));
                gint num_tabs = gtk_notebook_get_n_pages(tabs);
@@ -94,7 +108,7 @@ gboolean on_key_press(GtkWidget *widget, GdkEventKey *event, AWeatherGui *gui)
                else 
                        gtk_notebook_set_current_page(tabs, (cur_tab+1)%num_tabs);
        };
-       return TRUE;
+       return FALSE;
 }
 
 void on_refresh(GtkToolButton *button, AWeatherGui *gui)
@@ -387,7 +401,7 @@ AWeatherGui *aweather_gui_new()
                g_error("Failed to create gtk builder: %s", error->message);
        gtk_builder_connect_signals(self->builder, self);
        g_signal_connect(self, "delete-event",    G_CALLBACK(gtk_main_quit), self);
-       g_signal_connect(self, "key-press-event", G_CALLBACK(on_key_press),  self);
+       g_signal_connect(self, "key-press-event", G_CALLBACK(on_gui_key_press),  self);
        gtk_widget_reparent(aweather_gui_get_widget(self, "body"), GTK_WIDGET(self));
 
        /* Load components */
index 7f4efa39950440725638d13b184b0b5d89a9837f..355f93d0431dec7e78fae315f167342625af81a3 100644 (file)
@@ -197,12 +197,8 @@ static void load_radar(AWeatherRadar *self, gchar *radar_file)
        char *dir  = g_path_get_dirname(radar_file);
        char *site = g_path_get_basename(dir);
        g_free(dir);
-       RSL_read_these_sweeps("all", NULL);
-       if (self->cur_radar) {
-               g_debug("AWeatherRadar: load_radar - Freeing old radar");
-               RSL_free_radar(self->cur_radar);
-       }
        g_debug("AWeatherRadar: load_radar - Loading new radar");
+       RSL_read_these_sweeps("all", NULL);
        Radar *radar = self->cur_radar = RSL_wsr88d_to_radar(radar_file, site);
        if (radar == NULL) {
                g_warning("fail to load radar: path=%s, site=%s", radar_file, site);
@@ -279,14 +275,15 @@ typedef struct {
        gchar *radar_file;
 } decompressed_t;
 
-static void decompressed_cb(GPid pid, gint status, gpointer _self)
+static void decompressed_cb(GPid pid, gint status, gpointer _udata)
 {
-       decompressed_t *udata = _self;
+       decompressed_t *udata = _udata;
        if (status != 0) {
                g_warning("wsr88ddec exited with status %d", status);
                return;
        }
        load_radar(udata->self, udata->radar_file);
+       g_spawn_close_pid(pid);
        g_free(udata->radar_file);
        g_free(udata);
 }
@@ -352,8 +349,10 @@ static void on_time_changed(AWeatherView *view, char *time, gpointer _self)
        gtk_container_add(GTK_CONTAINER(self->config_body),
                gtk_label_new("Loading radar..."));
        gtk_widget_show_all(self->config_body);
+       if (self->cur_radar)
+               RSL_free_radar(self->cur_radar);
        self->cur_radar = NULL;
-       self->cur_sweep = NULL; // Clear radar
+       self->cur_sweep = NULL;
        aweather_gui_gl_redraw(self->gui);
 
        /* Start loading the new radar */