From a5c578c4ab1311302308ac0d7f3f567f0d0520fc Mon Sep 17 00:00:00 2001 From: Andy Spencer Date: Mon, 25 May 2009 12:45:23 +0000 Subject: [PATCH 1/1] Arrows/+/- only apply to drawing area Fixed memory leak regression --- Makefile.am | 3 +-- data/main.glade | 14 ++++++++++---- src/Makefile.am | 2 +- src/aweather-gui.c | 32 +++++++++++++++++++++++--------- src/plugin-radar.c | 15 +++++++-------- 5 files changed, 42 insertions(+), 24 deletions(-) diff --git a/Makefile.am b/Makefile.am index c404399..47470fb 100644 --- a/Makefile.am +++ b/Makefile.am @@ -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 diff --git a/data/main.glade b/data/main.glade index eadaba0..38fca62 100644 --- a/data/main.glade +++ b/data/main.glade @@ -1,10 +1,8 @@ - + - - True @@ -127,7 +125,7 @@ gtk-zoom-in True True - + @@ -246,7 +244,15 @@ 600 550 True + True + True + True + True + True + True GDK_POINTER_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_STRUCTURE_MASK + + diff --git a/src/Makefile.am b/src/Makefile.am index d05c4fb..1721d9f 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -29,7 +29,7 @@ MAINTAINERCLEANFILES = Makefile.in glib-genmarshal --prefix=aweather_cclosure_marshal --header $< > $@ test: all - ./aweather + ./aweather -d 7 gdb: all gdb ./aweather diff --git a/src/aweather-gui.c b/src/aweather-gui.c index 48fc87e..c21471f 100644 --- a/src/aweather-gui.c +++ b/src/aweather-gui.c @@ -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 */ diff --git a/src/plugin-radar.c b/src/plugin-radar.c index 7f4efa3..355f93d 100644 --- a/src/plugin-radar.c +++ b/src/plugin-radar.c @@ -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 */ -- 2.43.2