[maemo-commits] [maemo-commits] r8780 - in projects/haf/branches/maemo-af-desktop/hildon-desktop: . libhildondesktop libhildonwm

From: subversion at stage.maemo.org subversion at stage.maemo.org
Date: Fri Dec 15 14:41:51 EET 2006
Author: jobi
Date: 2006-12-15 14:41:49 +0200 (Fri, 15 Dec 2006)
New Revision: 8780

Modified:
   projects/haf/branches/maemo-af-desktop/hildon-desktop/ChangeLog
   projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/desktop-panel-window.c
   projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/hildon-home-titlebar.c
   projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/hildon-home-window.c
   projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/hildon-home-window.h
   projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildonwm/hd-wm.c
   projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildonwm/hd-wm.h
Log:

2006-12-15  Johan Bilien  <johan.bilien at nokia.com>

	* libhildondesktop/desktop-panel-window.c: Fixed a warning
	* libhildondesktop/hildon-home-window.c:
	- Removed main_area and hbox in the layout
	- implemeted _expose, _map, _forall, size_allocate
	- track the _NET_WORKAREA and resize accordingly
	* libhildondesktop/hildon-home-titlebar.c: Removed hard-coded
	width
	* libhildonwm/hd-wm.[ch]: Added _get_workarea method



Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/ChangeLog
===================================================================
--- projects/haf/branches/maemo-af-desktop/hildon-desktop/ChangeLog	2006-12-15 11:35:33 UTC (rev 8779)
+++ projects/haf/branches/maemo-af-desktop/hildon-desktop/ChangeLog	2006-12-15 12:41:49 UTC (rev 8780)
@@ -1,3 +1,14 @@
+2006-12-15  Johan Bilien  <johan.bilien at nokia.com>
+
+	* libhildondesktop/desktop-panel-window.c: Fixed a warning
+	* libhildondesktop/hildon-home-window.c:
+	- Removed main_area and hbox in the layout
+	- implemeted _expose, _map, _forall, size_allocate
+	- track the _NET_WORKAREA and resize accordingly
+	* libhildondesktop/hildon-home-titlebar.c: Removed hard-coded
+	width
+	* libhildonwm/hd-wm.[ch]: Added _get_workarea method
+
 2006-12-15  Lucas Rocha  <lucas.rocha at nokia.com>
 
 	* libhildondesktop/hildon-desktop-plugin.[ch]: small fixes on GObject

Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/desktop-panel-window.c
===================================================================
--- projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/desktop-panel-window.c	2006-12-15 11:35:33 UTC (rev 8779)
+++ projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/desktop-panel-window.c	2006-12-15 12:41:49 UTC (rev 8780)
@@ -768,14 +768,15 @@
 desktop_panel_update_geometry (DesktopPanelWindow *window)
 {
   GdkScreen *screen;
-  gint monitor;
+  gint monitor = 0;
  
   CHECK_MULTISCREEN_HANDLER (window->priv->ms);
 
   screen = gtk_window_get_screen (GTK_WINDOW (window));
 
-  monitor = gdk_screen_get_monitor_at_window (screen, 
-                                              GTK_WIDGET (window)->window); 
+  if (GTK_WIDGET_REALIZED (window))
+    monitor = gdk_screen_get_monitor_at_window (screen, 
+                                                GTK_WIDGET (window)->window); 
 
   desktop_panel_update_size (window, screen, monitor);
   desktop_panel_update_position (window, screen, monitor);

Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/hildon-home-titlebar.c
===================================================================
--- projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/hildon-home-titlebar.c	2006-12-15 11:35:33 UTC (rev 8779)
+++ projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/hildon-home-titlebar.c	2006-12-15 12:41:49 UTC (rev 8780)
@@ -46,7 +46,6 @@
 #include "hildon-home-window.h"
 #include "hildon-home-l10n.h"
 
-#define HILDON_HOME_TITLEBAR_WIDTH	720
 #define HILDON_HOME_TITLEBAR_HEIGHT	60
 #define HILDON_HOME_TITLEBAR_MENU_LABEL_FONT  "osso-TitleFont"
 #define HILDON_HOME_TITLEBAR_MENU_LABEL_COLOR "TitleTextColor"
@@ -537,6 +536,8 @@
   HildonHomeTitlebar *titlebar;
   gdouble x_win, y_win;
 
+  g_debug ("button_press");
+
   /* Make sure we don't step over the end of the title bar */
   gdk_event_get_coords ((GdkEvent *) event, &x_win, &y_win);
   if (x_win >= HILDON_HOME_MENU_WIDTH)
@@ -733,7 +734,7 @@
   g_type_class_add_private (gobject_class, sizeof (HildonHomeTitlebarPrivate));
 }
 
-    static void
+static void
 hildon_home_titlebar_init (HildonHomeTitlebar *titlebar)
 {
   HildonHomeTitlebarPrivate *priv;
@@ -747,7 +748,7 @@
   priv->menu_popup_status = FALSE;
 
   gtk_widget_set_size_request (GTK_WIDGET (titlebar),
-                               HILDON_HOME_TITLEBAR_WIDTH,
+                               -1,
                                HILDON_HOME_TITLEBAR_HEIGHT);
 
   gtk_event_box_set_visible_window (GTK_EVENT_BOX (titlebar), FALSE);
@@ -809,6 +810,7 @@
                     titlebar);
   gtk_box_pack_start (GTK_BOX (hbox), priv->layout_accept, FALSE, FALSE, 0);
 
+
   priv->layout_cancel = gtk_button_new_with_label ("");
   g_object_set (priv->layout_cancel,
                 "image", gtk_image_new_from_icon_name (LAYOUT_MODE_CANCEL_BUTTON,
@@ -824,6 +826,13 @@
 
   priv->layout_text = g_strdup (HH_MENU_LAYOUT_TITLE);
 
+  g_signal_connect_swapped (priv->layout_cancel, "size-allocate",
+                            G_CALLBACK (g_print),
+                            "CANCEL BUTTON ALLOCATE\n");
+  g_signal_connect_swapped (priv->layout_accept, "size-allocate",
+                            G_CALLBACK (g_print),
+                            "ACCEPT BUTTON ALLOCATE\n");
+
   gtk_widget_pop_composite_child ();
 }
 
@@ -844,6 +853,8 @@
 
   g_return_if_fail (HILDON_IS_HOME_TITLEBAR (titlebar));
 
+  g_debug ("SETTING TITLEBAR MODE");
+
   priv = titlebar->priv;
 
   if (priv->mode != mode)

Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/hildon-home-window.c
===================================================================
--- projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/hildon-home-window.c	2006-12-15 11:35:33 UTC (rev 8779)
+++ projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/hildon-home-window.c	2006-12-15 12:41:49 UTC (rev 8780)
@@ -29,23 +29,15 @@
 #include <gdk/gdkx.h>
 #include <gdk/gdkkeysyms.h>
 #include <stdlib.h>
-#include <gtk/gtk.h>
-#include <locale.h>
-#include <libintl.h>
-#include <math.h>
 #include <stdio.h>
 #include <string.h>
 
 #include <libosso.h>
 #include <glib.h>
 
-#include <libgnomevfs/gnome-vfs.h>
-
 #include <hildon-widgets/hildon-banner.h>
 #include <hildon-widgets/hildon-note.h>
 #include <hildon-widgets/hildon-defines.h>
-#include <hildon-widgets/hildon-caption.h>
-#include <hildon-widgets/hildon-color-button.h>
 
 #include <libhildonwm/hd-wm.h>
 
@@ -94,11 +86,8 @@
 {
 /*  BackgroundManager *bg_manager;*/
 
-  GtkWidget    *align;
-  
   GtkWidget    *titlebar;
   GtkWidget    *applet_area;
-  GtkWidget    *main_area;
 
   GtkWidget    *layout_mode_banner;
   guint         layout_mode_banner_to;
@@ -744,6 +733,131 @@
   g_free (user_filename);
 }
 
+static void
+hildon_home_window_size_allocate (GtkWidget *widget,
+                                  GtkAllocation *allocation)
+{
+  HildonHomeWindow *window;
+  HildonHomeWindowPrivate *priv;
+  GtkRequisition child_req;
+  GtkAllocation  child_allocation = {0};
+
+  window = HILDON_HOME_WINDOW (widget);
+  priv = window->priv;
+
+  widget->allocation = *allocation;
+
+  if (!priv->work_area)
+    return;
+
+  g_debug ("In size_allocate, work area is (%i,%i) %ix%i",
+           priv->work_area->x,
+           priv->work_area->y,
+           priv->work_area->width,
+           priv->work_area->height);
+
+
+  if (GTK_IS_WIDGET (priv->titlebar))
+    {
+      gtk_widget_size_request (priv->titlebar, &child_req);
+      child_allocation.x = priv->work_area->x;
+      child_allocation.y = priv->work_area->y;
+      child_allocation.width = priv->work_area->width;
+      child_allocation.height = MIN (priv->work_area->height, child_req.height);
+
+      g_debug ("Allocating (%i,%i) %ix%i to titlebar",
+               child_allocation.x,
+               child_allocation.y,
+               child_allocation.width,
+               child_allocation.height);
+      gtk_widget_size_allocate (priv->titlebar, &child_allocation);
+    }
+
+  if (GTK_IS_WIDGET (priv->applet_area))
+    {
+      child_allocation.y = child_allocation.height;
+      child_allocation.height = priv->work_area->height -
+                                child_allocation.height;
+
+      child_allocation.x = priv->work_area->x;
+      child_allocation.width = priv->work_area->width;
+      
+      g_debug ("Allocating (%i,%i) %ix%i to applet area",
+               child_allocation.x,
+               child_allocation.y,
+               child_allocation.width,
+               child_allocation.height);
+      gtk_widget_size_allocate (priv->applet_area, &child_allocation);
+    }
+}
+
+static gint
+hildon_home_window_expose (GtkWidget       *widget,
+                           GdkEventExpose  *event)
+{
+  HildonHomeWindow *window;
+  HildonHomeWindowPrivate *priv;
+
+  window = HILDON_HOME_WINDOW (widget);
+  priv = window->priv;
+
+  g_debug ("Called hildon_home_window_expose");
+
+  if (GTK_IS_WIDGET (priv->applet_area))
+    gtk_container_propagate_expose (GTK_CONTAINER (widget),
+                                    priv->applet_area,
+                                    event);
+  
+  if (GTK_IS_WIDGET (priv->titlebar))
+    gtk_container_propagate_expose (GTK_CONTAINER (widget),
+                                    priv->titlebar,
+                                    event);
+
+  
+  return TRUE;
+}
+
+static void
+hildon_home_window_map (GtkWidget *widget)
+{
+  HildonHomeWindow *window;
+  HildonHomeWindowPrivate *priv;
+
+  window = HILDON_HOME_WINDOW (widget);
+  priv = window->priv;
+
+  if (GTK_WIDGET_CLASS (hildon_home_window_parent_class)->map)
+    GTK_WIDGET_CLASS (hildon_home_window_parent_class)->map (widget);
+
+  if (GTK_IS_WIDGET (priv->applet_area))
+    gtk_widget_map (priv->applet_area);
+  
+  if (GTK_IS_WIDGET (priv->titlebar))
+    gtk_widget_map (priv->titlebar);
+
+}
+
+
+
+static void
+hildon_home_window_forall (GtkContainer     *container,
+                           gboolean          include_internals,
+                           GtkCallback       callback,
+                           gpointer          callback_data)
+{
+  HildonHomeWindow *window;
+  HildonHomeWindowPrivate *priv;
+
+  window = HILDON_HOME_WINDOW (container);
+  priv = window->priv;
+
+  if (GTK_IS_WIDGET (priv->titlebar) && include_internals)
+    (* callback) (priv->titlebar, callback_data);
+
+  if (GTK_IS_WIDGET (priv->applet_area))
+    (* callback) (priv->applet_area, callback_data);
+}
+
 static GObject *
 hildon_home_window_constructor (GType                  gtype,
                                 guint                  n_params,
@@ -753,8 +867,6 @@
   HildonHomeWindow *window;
   HildonHomeWindowPrivate *priv;
   GtkWidget *widget;
-  GtkWidget *vbox;
-  GtkWidget *hbox;
 
   retval = G_OBJECT_CLASS (hildon_home_window_parent_class)->constructor (gtype,
 		  							  n_params,
@@ -766,29 +878,7 @@
   gtk_widget_set_app_paintable (widget, TRUE);
 
   gtk_widget_push_composite_child ();
-  
-  /* we push everything inside an alignment because we don't want
-   * to be hidden by the task navigator
-   */
-  priv->align = gtk_alignment_new (0.0, 0.0, 1.0, 1.0);
-  gtk_alignment_set_padding (GTK_ALIGNMENT (priv->align),
-		  	     0, 0, /* top, bottom */
-			     HILDON_HOME_LEFT_PADDING, 0);
-  gtk_widget_set_composite_name (priv->align, "hildon-home-main-alignment");
-  gtk_container_add (GTK_CONTAINER (window), priv->align);
-  gtk_widget_show (priv->align);
-  
-  vbox = gtk_vbox_new (FALSE, 0);
-  gtk_widget_set_composite_name (vbox, "hildon-home-main-vbox");
-  gtk_container_add (GTK_CONTAINER (priv->align), vbox);
-  gtk_widget_show (vbox);
 
-  hbox = gtk_hbox_new (FALSE, 0);
-  gtk_widget_set_size_request (hbox, -1, HILDON_HOME_TOP_BAR_HEIGHT);
-  gtk_widget_set_composite_name (hbox, "hildon-home-top-bar");
-  gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
-  gtk_widget_show (hbox);
-
   priv->titlebar = hildon_home_titlebar_new ();
   gtk_widget_set_composite_name (priv->titlebar, "hildon-home-titlebar");
   g_signal_connect (priv->titlebar, "select-applets-activate",
@@ -806,17 +896,20 @@
   g_signal_connect (priv->titlebar, "layout-cancel",
 		    G_CALLBACK (titlebar_layout_cancel_cb),
 		    window);
-  gtk_box_pack_start (GTK_BOX (hbox), priv->titlebar, TRUE, TRUE, 0);
+  g_object_ref (priv->titlebar);
+  gtk_object_sink (GTK_OBJECT (priv->titlebar));
+  gtk_widget_set_parent (priv->titlebar, widget);
   gtk_widget_show (priv->titlebar);
 
-  priv->main_area = gtk_event_box_new ();
-  gtk_widget_set_composite_name (priv->main_area, "hildon-home-main-area");
-  gtk_box_pack_end (GTK_BOX (vbox), priv->main_area, TRUE, TRUE, 0);
-  gtk_widget_show (priv->main_area);
+  priv->applet_area = hildon_home_area_new ();
+  
+  g_object_ref (priv->applet_area);
+  gtk_object_sink (GTK_OBJECT (priv->applet_area));
+  gtk_widget_show (priv->applet_area);
+  gtk_widget_set_parent (priv->applet_area, widget);
 
-  priv->applet_area = hildon_home_area_new ();
-  gtk_container_add (GTK_CONTAINER(priv->main_area), priv->applet_area);
   HILDON_DESKTOP_WINDOW (window)->container = GTK_CONTAINER (priv->applet_area);
+  
   g_signal_connect (priv->applet_area, "layout-mode-start",
                     G_CALLBACK (area_layout_mode_start),
                     window);
@@ -879,9 +972,10 @@
 static void
 hildon_home_window_class_init (HildonHomeWindowClass *klass)
 {
-  GParamSpec       *pspec;
-  GObjectClass     *gobject_class = G_OBJECT_CLASS (klass);
-  GtkWidgetClass   *widget_class = GTK_WIDGET_CLASS (klass);
+  GParamSpec           *pspec;
+  GObjectClass         *gobject_class = G_OBJECT_CLASS (klass);
+  GtkWidgetClass       *widget_class = GTK_WIDGET_CLASS (klass);
+  GtkContainerClass    *container_class = GTK_CONTAINER_CLASS (klass);
 
   gobject_class->constructor = hildon_home_window_constructor;
   gobject_class->set_property = hildon_home_window_set_property;
@@ -890,7 +984,12 @@
   
   widget_class->style_set = hildon_home_window_style_set;
   widget_class->key_press_event = hildon_home_window_key_press_event;
+  widget_class->size_allocate = hildon_home_window_size_allocate;
+  widget_class->expose_event = hildon_home_window_expose;
+  widget_class->map = hildon_home_window_map;
 
+  container_class->forall = hildon_home_window_forall;
+
   klass->background = hildon_home_window_background;
   klass->lowmem = hildon_home_window_lowmem;
   klass->system_inactivity = hildon_home_window_system_inactivity;
@@ -931,7 +1030,7 @@
   pspec =  g_param_spec_pointer ("work-area",
                                  "Work Area",
                                  "Work area available for desktop",
-                                 (G_PARAM_READABLE | G_PARAM_CONSTRUCT));
+                                 G_PARAM_READWRITE);
 
   g_object_class_install_property (gobject_class,
                                    PROP_WORK_AREA,
@@ -945,6 +1044,7 @@
 {
   HildonHomeWindowPrivate *priv;
   GtkWidget *widget;
+  GdkRectangle work_area;
   HDWM *wm;
 
   gtk_window_set_has_frame (GTK_WINDOW (window), FALSE);
@@ -959,6 +1059,12 @@
   priv->is_dimmed = FALSE;
 
   wm = hd_wm_get_singleton ();
+
+  hd_wm_get_work_area (wm, &work_area);
+  g_debug ("Got work_area");
+  hildon_home_window_set_work_area (window, &work_area);
+  g_debug ("Work_area set");
+
   g_signal_connect_swapped (wm, "work-area-changed",
                             G_CALLBACK (hildon_home_window_set_work_area),
                             window);
@@ -969,6 +1075,9 @@
                                   GdkRectangle *work_area)
 {
   HildonHomeWindowPrivate   *priv;
+
+  g_debug ("hildon_home_window_set_work_area: window: %p, work_area: %p",
+           window, work_area);
   g_return_if_fail (HILDON_IS_HOME_WINDOW (window) && work_area);
   priv = window->priv;
 
@@ -1010,15 +1119,6 @@
   return window->priv->titlebar;
 }
 
-GtkWidget *
-hildon_home_window_get_main_area (HildonHomeWindow *window)
-{
-  g_return_val_if_fail (HILDON_IS_HOME_WINDOW (window), NULL);
-
-  return window->priv->main_area;
-}
-
-
 void
 hildon_home_window_show_information_note (HildonHomeWindow *window,
                                           const gchar *text)

Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/hildon-home-window.h
===================================================================
--- projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/hildon-home-window.h	2006-12-15 11:35:33 UTC (rev 8779)
+++ projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/hildon-home-window.h	2006-12-15 12:41:49 UTC (rev 8780)
@@ -62,7 +62,6 @@
 GtkWidget *hildon_home_window_new                  (void);
 
 GtkWidget *hildon_home_window_get_titlebar         (HildonHomeWindow *window);
-GtkWidget *hildon_home_window_get_main_area        (HildonHomeWindow *window);
 
 void       hildon_home_window_show_information_note(HildonHomeWindow *window,
                                                     const gchar *text);

Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildonwm/hd-wm.c
===================================================================
--- projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildonwm/hd-wm.c	2006-12-15 11:35:33 UTC (rev 8779)
+++ projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildonwm/hd-wm.c	2006-12-15 12:41:49 UTC (rev 8780)
@@ -1875,30 +1875,10 @@
     else
     if (prop->atom == hdwm->priv->atoms[HD_ATOM_NET_WORKAREA])
     {
-      int *work_area_data;
+      GdkRectangle work_area;
 
-      work_area_data =
-        hd_wm_util_get_win_prop_data_and_validate (
-                           GDK_WINDOW_XID (gdk_get_default_root_window()),
-						   hdwm->priv->atoms[HD_ATOM_NET_WORKAREA],
-						   XA_CARDINAL,
-						   32,
-						   4,
-						   NULL);
-
-      if (work_area_data)
-        {
-          GdkRectangle work_area;
-
-          work_area.width  = work_area_data[0];
-          work_area.height = work_area_data[1];
-          work_area.x      = work_area_data[2];
-          work_area.y      = work_area_data[3];
-
-          g_signal_emit_by_name (hdwm, "work-area-changed", &work_area);
-
-          XFree (work_area_data);
-        }
+      hd_wm_get_work_area (hdwm, &work_area);
+      g_signal_emit_by_name (hdwm, "work-area-changed", &work_area);
     }
     else 
     if (prop->atom == hdwm->priv->atoms[HD_ATOM_NET_SHOWING_DESKTOP])
@@ -2521,3 +2501,27 @@
   }
 }
 
+void
+hd_wm_get_work_area (HDWM *hdwm, GdkRectangle *work_area)
+{
+  int *work_area_data;
+
+  work_area_data =
+      hd_wm_util_get_win_prop_data_and_validate (
+                     GDK_WINDOW_XID (gdk_get_default_root_window()),
+                     hdwm->priv->atoms[HD_ATOM_NET_WORKAREA],
+                     XA_CARDINAL,
+                     32,
+                     4,
+                     NULL);
+
+  if (work_area_data)
+    {
+      work_area->x      = work_area_data[0];
+      work_area->y      = work_area_data[1];
+      work_area->width  = work_area_data[2];
+      work_area->height = work_area_data[3];
+
+      XFree (work_area_data);
+    }
+}

Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildonwm/hd-wm.h
===================================================================
--- projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildonwm/hd-wm.h	2006-12-15 11:35:33 UTC (rev 8779)
+++ projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildonwm/hd-wm.h	2006-12-15 12:41:49 UTC (rev 8780)
@@ -237,6 +237,9 @@
 gboolean
 hd_wm_fullscreen_mode (void);
 
+void
+hd_wm_get_work_area (HDWM *hdwm, GdkRectangle *work_area);
+
 /*
  * These are simple getters/setters that replace direct use of global
  * hnwm->something. In order to ensure that we do not incure performance


More information about the maemo-commits mailing list