1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
3 * Copyright (C) 2006-2007 Imendio AB
4 * Copyright (C) 2007-2008 Collabora Ltd.
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License as
8 * published by the Free Software Foundation; either version 2 of the
9 * License, or (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * General Public License for more details.
16 * You should have received a copy of the GNU General Public
17 * License along with this program; if not, write to the
18 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 * Boston, MA 02111-1307, USA.
21 * Authors: Martyn Russell <martyn@imendio.com>
22 * Xavier Claessens <xclaesse@gmail.com>
32 #include "empathy-geometry.h"
34 #define DEBUG_FLAG EMPATHY_DEBUG_OTHER
35 #include <libempathy/empathy-debug.h>
37 #define GEOMETRY_DIR_CREATE_MODE (S_IRUSR | S_IWUSR | S_IXUSR)
38 #define GEOMETRY_FILE_CREATE_MODE (S_IRUSR | S_IWUSR)
40 #define GEOMETRY_KEY_FILENAME "geometry.ini"
41 #define GEOMETRY_FORMAT "%d,%d,%d,%d"
42 #define GEOMETRY_GROUP_NAME "geometry"
44 static gchar
*geometry_get_filename (void);
47 geometry_get_filename (void)
52 dir
= g_build_filename (g_get_home_dir (), ".gnome2", PACKAGE_NAME
, NULL
);
53 if (!g_file_test (dir
, G_FILE_TEST_EXISTS
| G_FILE_TEST_IS_DIR
)) {
54 DEBUG ("Creating directory:'%s'", dir
);
55 g_mkdir_with_parents (dir
, GEOMETRY_DIR_CREATE_MODE
);
58 filename
= g_build_filename (dir
, GEOMETRY_KEY_FILENAME
, NULL
);
65 empathy_geometry_save (const gchar
*name
,
81 DEBUG ("Saving window geometry: x:%d, y:%d, w:%d, h:%d\n",
84 screen
= gdk_screen_get_default ();
85 max_width
= gdk_screen_get_width (screen
);
86 max_height
= gdk_screen_get_height (screen
);
88 w
= CLAMP (w
, 100, max_width
);
89 h
= CLAMP (h
, 100, max_height
);
91 x
= CLAMP (x
, 0, max_width
- w
);
92 y
= CLAMP (y
, 0, max_height
- h
);
94 str
= g_strdup_printf (GEOMETRY_FORMAT
, x
, y
, w
, h
);
96 key_file
= g_key_file_new ();
98 filename
= geometry_get_filename ();
100 g_key_file_load_from_file (key_file
, filename
, G_KEY_FILE_NONE
, NULL
);
101 g_key_file_set_string (key_file
, GEOMETRY_GROUP_NAME
, name
, str
);
105 content
= g_key_file_to_data (key_file
, &length
, NULL
);
106 if (!g_file_set_contents (filename
, content
, length
, &error
)) {
107 g_warning ("Couldn't save window geometry, error:%d->'%s'",
108 error
->code
, error
->message
);
109 g_error_free (error
);
114 g_key_file_free (key_file
);
118 empathy_geometry_load (const gchar
*name
,
144 key_file
= g_key_file_new ();
146 filename
= geometry_get_filename ();
148 if (g_key_file_load_from_file (key_file
, filename
, G_KEY_FILE_NONE
, NULL
)) {
149 str
= g_key_file_get_string (key_file
, GEOMETRY_GROUP_NAME
, name
, NULL
);
153 gint tmp_x
, tmp_y
, tmp_w
, tmp_h
;
155 sscanf (str
, GEOMETRY_FORMAT
, &tmp_x
, &tmp_y
, &tmp_w
, &tmp_h
);
176 DEBUG ("Loading window geometry: x:%d, y:%d, w:%d, h:%d\n",
177 x
? *x
: -1, y
? *y
: -1, w
? *w
: -1, h
? *h
: -1);
180 g_key_file_free (key_file
);