Changeset 96

Show
Ignore:
Timestamp:
07/01/08 19:22:32 (2 months ago)
Author:
inz
Message:

Handle backgrounding and display off. Fix file descriptor leak.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • mh-home-sysmon/trunk/Makefile

    r93 r96  
    1 CFLAGS += -W -Wall `pkg-config libhildondesktop --cflags` 
    2 LDFLAGS += -g `pkg-config libhildondesktop --libs` 
     1CFLAGS += -W -Wall `pkg-config dbus-glib-1 libhildondesktop mce --cflags` 
     2LDFLAGS += -g `pkg-config dbus-glib-1 libhildondesktop mce --libs` 
    33 
    44SOURCES := $(wildcard *.c) 
  • mh-home-sysmon/trunk/debian/changelog

    r93 r96  
     1mh-home-sysmon (0.0.2) unstable; urgency=low 
     2 
     3  * Handle {back,fore}ground signals and mce display off signal. 
     4  * Fix file descriptor leak. 
     5 
     6 -- Santtu Lakkala <inz@inz.fi>  Tue,  1 Jul 2008 19:20:04 +0300 
     7 
    18mh-home-sysmon (0.0.1) unstable; urgency=low 
    29 
  • mh-home-sysmon/trunk/debian/control

    r93 r96  
    33Priority: optional 
    44Maintainer: Santtu Lakkala <inz@inz.fi> 
    5 Build-Depends: debhelper (>= 4.0.0), libhildondesktop-dev, libgtk2.0-dev, osso-af-settings 
     5Build-Depends: debhelper (>= 4.0.0), libhildondesktop-dev, libgtk2.0-dev, osso-af-settings, mce-dev, libdbus-glib-1-dev 
    66Standards-Version: 3.6.1 
    77 
  • mh-home-sysmon/trunk/mh-cpu-source.c

    r93 r96  
    4343        FILE *proc_stat = fopen("/proc/stat", "r"); 
    4444        fscanf(proc_stat, "cpu %u %u %u %u", &user, &nice, &kern, &idle); 
     45        fclose(proc_stat); 
     46 
    4547        change = user + nice + kern + idle - data->prev; 
    4648        data->prev = user + nice + kern + idle; 
  • mh-home-sysmon/trunk/mh-home-sysmon.c

    r93 r96  
    44#include <stdlib.h> 
    55 
     6#include <dbus/dbus-glib.h> 
     7 
    68#ifndef GTKDEBUG 
     9#include <mce/dbus-names.h> 
     10#include <mce/mode-names.h> 
    711#include <libhildondesktop/libhildondesktop.h> 
    812#endif 
     
    1519 
    1620#include <stdio.h> 
     21#include <string.h> 
    1722 
    1823#define MH_HOME_SYSMON_GET_PRIVATE(x) (G_TYPE_INSTANCE_GET_PRIVATE((x), MH_TYPE_HOME_SYSMON, MhHomeSysmonPrivate)) 
     
    2328        GQueue *solid_data; 
    2429 
     30#ifndef GTKDEBUG 
     31        DBusGConnection *gconn; 
     32        DBusGProxy *proxy; 
     33#endif 
     34 
    2535        DataSource *line_source; 
    2636        DataSource *solid_source; 
     
    3040        guint datapoints; 
    3141        guint timer_source; 
     42 
     43        gboolean foreground; 
    3244}; 
    3345 
     
    5567                            gint padding, 
    5668                            const gchar *markup, TextAlign align); 
     69static void mh_home_sysmon_foreground(HildonDesktopHomeItem *item); 
     70static void mh_home_sysmon_background(HildonDesktopHomeItem *item); 
     71static void mh_home_sysmon_display_ind(DBusGProxy *proxy, 
     72                                       gchar *display_state, 
     73                                       MhHomeSysmon *sysmon); 
    5774 
    5875#ifndef GTKDEBUG 
     
    6986        g_queue_free(priv->line_data); 
    7087        g_queue_free(priv->solid_data); 
     88 
     89        g_object_unref(priv->proxy); 
     90        g_object_unref(priv->gconn); 
    7191} 
    7292 
     
    94114        priv->timer_source = 
    95115                g_timeout_add(5000, mh_home_sysmon_update, plugin); 
     116 
     117        priv->foreground = TRUE; 
    96118 
    97119        gtk_widget_set_size_request(GTK_WIDGET(plugin), 140, 140); 
     
    100122                                                 (plugin), 
    101123                                                 HILDON_DESKTOP_HOME_ITEM_RESIZE_BOTH); 
     124 
     125        priv->gconn = dbus_g_bus_get(DBUS_BUS_SYSTEM, NULL); 
     126        priv->proxy = dbus_g_proxy_new_for_name(priv->gconn, 
     127                                                MCE_SERVICE, 
     128                                                MCE_SIGNAL_PATH, 
     129                                                MCE_SIGNAL_IF); 
     130        dbus_g_proxy_add_signal(priv->proxy, 
     131                                MCE_DISPLAY_SIG, 
     132                                G_TYPE_STRING, 
     133                                G_TYPE_INVALID); 
     134        dbus_g_proxy_connect_signal(priv->proxy, 
     135                                    MCE_DISPLAY_SIG, 
     136                                    G_CALLBACK(mh_home_sysmon_display_ind), 
     137                                    plugin, 
     138                                    NULL); 
    102139#endif 
    103140 
     
    109146        GObjectClass *object_class = G_OBJECT_CLASS(klass); 
    110147        GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass); 
     148        HildonDesktopHomeItemClass *item_class = 
     149                HILDON_DESKTOP_HOME_ITEM_CLASS(klass); 
    111150        g_type_class_add_private(klass, sizeof(MhHomeSysmonPrivate)); 
    112151 
     
    115154        widget_class->expose_event = mh_home_sysmon_expose; 
    116155        widget_class->screen_changed = mh_home_sysmon_screen_changed; 
     156 
     157        item_class->background = mh_home_sysmon_background; 
     158        item_class->foreground = mh_home_sysmon_foreground; 
    117159} 
    118160 
     
    155197                                      GdkEventExpose *event) 
    156198{ 
    157         cairo_t *cr = gdk_cairo_create(GDK_DRAWABLE(widget->window))
     199        cairo_t *cr
    158200        GtkRequisition req; 
    159201        cairo_path_t *path; 
     
    165207 
    166208        cairo_pattern_t *pattern; 
     209 
    167210        (void)event; 
    168211 
     212        if (!priv->foreground) { 
     213                return TRUE; 
     214        } 
     215 
     216        cr = gdk_cairo_create(GDK_DRAWABLE(widget->window)); 
    169217        req.height = widget->allocation.height; 
    170218        req.width = widget->allocation.width; 
     
    319367        g_object_unref(layout); 
    320368} 
     369 
     370static void mh_home_sysmon_foreground(HildonDesktopHomeItem *item) 
     371{ 
     372        MhHomeSysmonPrivate *priv = MH_HOME_SYSMON_GET_PRIVATE(item); 
     373 
     374        priv->foreground = TRUE; 
     375} 
     376 
     377static void mh_home_sysmon_background(HildonDesktopHomeItem *item) 
     378{ 
     379        MhHomeSysmonPrivate *priv = MH_HOME_SYSMON_GET_PRIVATE(item); 
     380 
     381        priv->foreground = FALSE; 
     382} 
     383 
     384#ifndef GTKDEBUG 
     385static void mh_home_sysmon_display_ind(DBusGProxy *proxy, 
     386                                       gchar *display_state, 
     387                                       MhHomeSysmon *sysmon) 
     388{ 
     389        MhHomeSysmonPrivate *priv = MH_HOME_SYSMON_GET_PRIVATE(sysmon); 
     390 
     391        (void)proxy; 
     392 
     393        if (strcmp(display_state, MCE_DISPLAY_OFF_STRING) == 0) 
     394        { 
     395                if (priv->timer_source) { 
     396                        g_source_remove(priv->timer_source); 
     397                } 
     398        } else { 
     399                if (!priv->timer_source) { 
     400                        priv->timer_source = 
     401                                g_timeout_add(5000, 
     402                                              mh_home_sysmon_update, sysmon); 
     403                } 
     404        } 
     405} 
     406#endif