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 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 <libempathy/gossip-debug.h>
34
#include "gossip-geometry.h"
36
#define DEBUG_DOMAIN "Geometry"
38
#define GEOMETRY_DIR_CREATE_MODE (S_IRUSR | S_IWUSR | S_IXUSR)
39
#define GEOMETRY_FILE_CREATE_MODE (S_IRUSR | S_IWUSR)
41
#define GEOMETRY_KEY_FILENAME "geometry.ini"
42
#define GEOMETRY_FORMAT "%d,%d,%d,%d"
43
#define GEOMETRY_GROUP_NAME "geometry"
45
static gchar *geometry_get_filename (void);
48
geometry_get_filename (void)
53
dir = g_build_filename (g_get_home_dir (), ".gnome2", PACKAGE_NAME, NULL);
54
if (!g_file_test (dir, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR)) {
55
gossip_debug (DEBUG_DOMAIN, "Creating directory:'%s'", dir);
56
g_mkdir_with_parents (dir, GEOMETRY_DIR_CREATE_MODE);
59
filename = g_build_filename (dir, GEOMETRY_KEY_FILENAME, NULL);
66
gossip_geometry_save (const gchar *name,
82
gossip_debug (DEBUG_DOMAIN, "Saving window geometry: x:%d, y:%d, w:%d, h:%d\n",
85
screen = gdk_screen_get_default ();
86
max_width = gdk_screen_get_width (screen);
87
max_height = gdk_screen_get_height (screen);
89
w = CLAMP (w, 100, max_width);
90
h = CLAMP (h, 100, max_height);
92
x = CLAMP (x, 0, max_width - w);
93
y = CLAMP (y, 0, max_height - h);
95
str = g_strdup_printf (GEOMETRY_FORMAT, x, y, w, h);
97
key_file = g_key_file_new ();
99
filename = geometry_get_filename ();
101
g_key_file_load_from_file (key_file, filename, G_KEY_FILE_NONE, NULL);
102
g_key_file_set_string (key_file, GEOMETRY_GROUP_NAME, name, str);
106
content = g_key_file_to_data (key_file, &length, NULL);
107
if (!g_file_set_contents (filename, content, length, &error)) {
108
g_warning ("Couldn't save window geometry, error:%d->'%s'",
109
error->code, error->message);
110
g_error_free (error);
115
g_key_file_free (key_file);
119
gossip_geometry_load (const gchar *name,
145
key_file = g_key_file_new ();
147
filename = geometry_get_filename ();
149
if (g_key_file_load_from_file (key_file, filename, G_KEY_FILE_NONE, NULL)) {
150
str = g_key_file_get_string (key_file, GEOMETRY_GROUP_NAME, name, NULL);
154
gint tmp_x, tmp_y, tmp_w, tmp_h;
156
sscanf (str, GEOMETRY_FORMAT, &tmp_x, &tmp_y, &tmp_w, &tmp_h);
177
gossip_debug (DEBUG_DOMAIN, "Loading window geometry: x:%d, y:%d, w:%d, h:%d\n",
184
g_key_file_free (key_file);