new function, and remove workspace->name field, instead just get the name
2002-11-03 Havoc Pennington <hp@pobox.com> * src/workspace.c (meta_workspace_get_name): new function, and remove workspace->name field, instead just get the name from prefs each time * src/screen.c (meta_screen_update_workspace_names): update the gconf key to persist workspace names here, instead of changing the names we use * src/util.c (topic_name): add META_DEBUG_PREFS * src/prefs.c: change NUM_COMMANDS to 32 to allow more custom commands, implement workspace names * src/metacity.schemas.in: add workspace_names/name_NN gconf keys.
This commit is contained in:
parent
7f36a8c7d1
commit
6a1abc7482
17
ChangeLog
17
ChangeLog
@ -1,3 +1,20 @@
|
|||||||
|
2002-11-03 Havoc Pennington <hp@pobox.com>
|
||||||
|
|
||||||
|
* src/workspace.c (meta_workspace_get_name): new function,
|
||||||
|
and remove workspace->name field, instead just get the
|
||||||
|
name from prefs each time
|
||||||
|
|
||||||
|
* src/screen.c (meta_screen_update_workspace_names): update the
|
||||||
|
gconf key to persist workspace names here, instead of changing
|
||||||
|
the names we use
|
||||||
|
|
||||||
|
* src/util.c (topic_name): add META_DEBUG_PREFS
|
||||||
|
|
||||||
|
* src/prefs.c: change NUM_COMMANDS to 32 to allow more custom
|
||||||
|
commands, implement workspace names
|
||||||
|
|
||||||
|
* src/metacity.schemas.in: add workspace_names/name_NN gconf keys.
|
||||||
|
|
||||||
2002-11-01 Christian Neumair <chris@gnome-de.org>
|
2002-11-01 Christian Neumair <chris@gnome-de.org>
|
||||||
|
|
||||||
* configure.in: We want at least autoconf 2.5.
|
* configure.in: We want at least autoconf 2.5.
|
||||||
|
@ -641,7 +641,7 @@ meta_core_get_menu_accelerator (MetaMenuOp menu_op,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
char *
|
const char*
|
||||||
meta_core_get_workspace_name_with_index (Display *xdisplay,
|
meta_core_get_workspace_name_with_index (Display *xdisplay,
|
||||||
Window xroot,
|
Window xroot,
|
||||||
int index)
|
int index)
|
||||||
@ -654,7 +654,7 @@ meta_core_get_workspace_name_with_index (Display *xdisplay,
|
|||||||
screen = meta_display_screen_for_root (display, xroot);
|
screen = meta_display_screen_for_root (display, xroot);
|
||||||
g_assert (screen != NULL);
|
g_assert (screen != NULL);
|
||||||
workspace = meta_screen_get_workspace_by_index (screen, index);
|
workspace = meta_screen_get_workspace_by_index (screen, index);
|
||||||
return (workspace != NULL) ? workspace->name : NULL;
|
return workspace ? meta_workspace_get_name (workspace) : NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
|
@ -102,9 +102,9 @@ int meta_core_get_num_workspaces (Screen *xscreen);
|
|||||||
int meta_core_get_active_workspace (Screen *xscreen);
|
int meta_core_get_active_workspace (Screen *xscreen);
|
||||||
int meta_core_get_frame_workspace (Display *xdisplay,
|
int meta_core_get_frame_workspace (Display *xdisplay,
|
||||||
Window frame_xwindow);
|
Window frame_xwindow);
|
||||||
char* meta_core_get_workspace_name_with_index (Display *xdisplay,
|
const char* meta_core_get_workspace_name_with_index (Display *xdisplay,
|
||||||
Window xroot,
|
Window xroot,
|
||||||
int index);
|
int index);
|
||||||
|
|
||||||
void meta_core_get_frame_extents (Display *xdisplay,
|
void meta_core_get_frame_extents (Display *xdisplay,
|
||||||
Window frame_xwindow,
|
Window frame_xwindow,
|
||||||
|
20
src/menu.c
20
src/menu.c
@ -136,8 +136,8 @@ get_workspace_name_with_accel (Display *display,
|
|||||||
Window xroot,
|
Window xroot,
|
||||||
int index)
|
int index)
|
||||||
{
|
{
|
||||||
char *name;
|
const char *name;
|
||||||
unsigned int number;
|
int number;
|
||||||
|
|
||||||
name = meta_core_get_workspace_name_with_index (display, xroot, index);
|
name = meta_core_get_workspace_name_with_index (display, xroot, index);
|
||||||
|
|
||||||
@ -146,16 +146,18 @@ get_workspace_name_with_accel (Display *display,
|
|||||||
* integer, insert a '_' before the number if it is less than 10 and
|
* integer, insert a '_' before the number if it is less than 10 and
|
||||||
* return it
|
* return it
|
||||||
*/
|
*/
|
||||||
if (sscanf (name, _("Workspace %u"), &number) == 1)
|
if (sscanf (name, _("Workspace %d"), &number) == 1)
|
||||||
{
|
{
|
||||||
|
char *new_name;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Above name is a pointer into the Workspace struct. Here we make
|
* Above name is a pointer into the Workspace struct. Here we make
|
||||||
* a copy copy so we can have our wicked way with it.
|
* a copy copy so we can have our wicked way with it.
|
||||||
*/
|
*/
|
||||||
name = g_strdup_printf (_("Workspace %s%d"),
|
new_name = g_strdup_printf (_("Workspace %s%d"),
|
||||||
number < 10 ? "_" : "",
|
number < 10 ? "_" : "",
|
||||||
number);
|
number);
|
||||||
return name;
|
return new_name;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -164,7 +166,9 @@ get_workspace_name_with_accel (Display *display,
|
|||||||
* add accelerators. Escape any _ characters so that the user's
|
* add accelerators. Escape any _ characters so that the user's
|
||||||
* workspace names do not get mangled.
|
* workspace names do not get mangled.
|
||||||
*/
|
*/
|
||||||
char *new_name, *source, *dest;
|
char *new_name;
|
||||||
|
const char *source;
|
||||||
|
char *dest;
|
||||||
source = name;
|
source = name;
|
||||||
/*
|
/*
|
||||||
* Assume the worst case, that every character is a _
|
* Assume the worst case, that every character is a _
|
||||||
|
@ -177,6 +177,35 @@
|
|||||||
</locale>
|
</locale>
|
||||||
</schema>
|
</schema>
|
||||||
|
|
||||||
|
<schema>
|
||||||
|
<key>/schemas/apps/metacity/workspace_names/name</key>
|
||||||
|
<applyto>/apps/metacity/workspace_names/name_1</applyto>
|
||||||
|
<applyto>/apps/metacity/workspace_names/name_2</applyto>
|
||||||
|
<applyto>/apps/metacity/workspace_names/name_3</applyto>
|
||||||
|
<applyto>/apps/metacity/workspace_names/name_4</applyto>
|
||||||
|
<applyto>/apps/metacity/workspace_names/name_5</applyto>
|
||||||
|
<applyto>/apps/metacity/workspace_names/name_6</applyto>
|
||||||
|
<applyto>/apps/metacity/workspace_names/name_7</applyto>
|
||||||
|
<applyto>/apps/metacity/workspace_names/name_8</applyto>
|
||||||
|
<applyto>/apps/metacity/workspace_names/name_9</applyto>
|
||||||
|
<applyto>/apps/metacity/workspace_names/name_10</applyto>
|
||||||
|
<applyto>/apps/metacity/workspace_names/name_11</applyto>
|
||||||
|
<applyto>/apps/metacity/workspace_names/name_12</applyto>
|
||||||
|
<applyto>/apps/metacity/workspace_names/name_13</applyto>
|
||||||
|
<applyto>/apps/metacity/workspace_names/name_14</applyto>
|
||||||
|
<applyto>/apps/metacity/workspace_names/name_15</applyto>
|
||||||
|
<applyto>/apps/metacity/workspace_names/name_16</applyto>
|
||||||
|
<owner>metacity</owner>
|
||||||
|
<type>string</type>
|
||||||
|
<default></default>
|
||||||
|
<locale name="C">
|
||||||
|
<short>Name of workspace</short>
|
||||||
|
<long>
|
||||||
|
The name of a workspace.
|
||||||
|
</long>
|
||||||
|
</locale>
|
||||||
|
</schema>
|
||||||
|
|
||||||
<!-- Window Keybindings -->
|
<!-- Window Keybindings -->
|
||||||
|
|
||||||
<schema>
|
<schema>
|
||||||
|
228
src/prefs.c
228
src/prefs.c
@ -27,6 +27,9 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#define MAX_REASONABLE_WORKSPACES 32
|
||||||
|
#define MAX_COMMANDS 32
|
||||||
|
|
||||||
/* If you add a key, it needs updating in init() and in the gconf
|
/* If you add a key, it needs updating in init() and in the gconf
|
||||||
* notify listener and of course in the .schemas file
|
* notify listener and of course in the .schemas file
|
||||||
*/
|
*/
|
||||||
@ -47,6 +50,8 @@
|
|||||||
#define KEY_SCREEN_BINDINGS_PREFIX "/apps/metacity/global_keybindings"
|
#define KEY_SCREEN_BINDINGS_PREFIX "/apps/metacity/global_keybindings"
|
||||||
#define KEY_WINDOW_BINDINGS_PREFIX "/apps/metacity/window_keybindings"
|
#define KEY_WINDOW_BINDINGS_PREFIX "/apps/metacity/window_keybindings"
|
||||||
|
|
||||||
|
#define KEY_WORKSPACE_NAME_PREFIX "/apps/metacity/workspace_names/name_"
|
||||||
|
|
||||||
static GConfClient *default_client = NULL;
|
static GConfClient *default_client = NULL;
|
||||||
static GList *listeners = NULL;
|
static GList *listeners = NULL;
|
||||||
static GList *changes = NULL;
|
static GList *changes = NULL;
|
||||||
@ -77,10 +82,11 @@ static MetaButtonLayout button_layout = {
|
|||||||
META_BUTTON_FUNCTION_LAST
|
META_BUTTON_FUNCTION_LAST
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
#define NUM_COMMANDS 12
|
static char *commands[MAX_COMMANDS] = { NULL, };
|
||||||
static char *commands[NUM_COMMANDS] = { NULL, NULL, NULL, NULL, NULL, NULL,
|
|
||||||
NULL, NULL, NULL, NULL, NULL, NULL };
|
static char *workspace_names[MAX_REASONABLE_WORKSPACES] = { NULL, };
|
||||||
|
|
||||||
|
|
||||||
static gboolean update_use_system_font (gboolean value);
|
static gboolean update_use_system_font (gboolean value);
|
||||||
static gboolean update_titlebar_font (const char *value);
|
static gboolean update_titlebar_font (const char *value);
|
||||||
@ -104,6 +110,9 @@ static gboolean update_binding (MetaKeyPref *binding,
|
|||||||
static gboolean update_command (const char *name,
|
static gboolean update_command (const char *name,
|
||||||
const char *value);
|
const char *value);
|
||||||
static void init_commands (void);
|
static void init_commands (void);
|
||||||
|
static gboolean update_workspace_name (const char *name,
|
||||||
|
const char *value);
|
||||||
|
static void init_workspace_names (void);
|
||||||
|
|
||||||
static void queue_changed (MetaPreference pref);
|
static void queue_changed (MetaPreference pref);
|
||||||
static void change_notify (GConfClient *client,
|
static void change_notify (GConfClient *client,
|
||||||
@ -111,8 +120,7 @@ static void change_notify (GConfClient *client,
|
|||||||
GConfEntry *entry,
|
GConfEntry *entry,
|
||||||
gpointer user_data);
|
gpointer user_data);
|
||||||
|
|
||||||
|
static char* gconf_key_for_workspace_name (int i);
|
||||||
|
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
@ -165,8 +173,8 @@ emit_changed (MetaPreference pref)
|
|||||||
GList *tmp;
|
GList *tmp;
|
||||||
GList *copy;
|
GList *copy;
|
||||||
|
|
||||||
meta_verbose ("Notifying listeners that pref %s changed\n",
|
meta_topic (META_DEBUG_PREFS, "Notifying listeners that pref %s changed\n",
|
||||||
meta_preference_to_string (pref));
|
meta_preference_to_string (pref));
|
||||||
|
|
||||||
copy = g_list_copy (listeners);
|
copy = g_list_copy (listeners);
|
||||||
|
|
||||||
@ -214,14 +222,14 @@ changed_idle_handler (gpointer data)
|
|||||||
static void
|
static void
|
||||||
queue_changed (MetaPreference pref)
|
queue_changed (MetaPreference pref)
|
||||||
{
|
{
|
||||||
meta_verbose ("Queueing change of pref %s\n",
|
meta_topic (META_DEBUG_PREFS, "Queueing change of pref %s\n",
|
||||||
meta_preference_to_string (pref));
|
meta_preference_to_string (pref));
|
||||||
|
|
||||||
if (g_list_find (changes, GINT_TO_POINTER (pref)) == NULL)
|
if (g_list_find (changes, GINT_TO_POINTER (pref)) == NULL)
|
||||||
changes = g_list_prepend (changes, GINT_TO_POINTER (pref));
|
changes = g_list_prepend (changes, GINT_TO_POINTER (pref));
|
||||||
else
|
else
|
||||||
meta_verbose ("Change of pref %s was already pending\n",
|
meta_topic (META_DEBUG_PREFS, "Change of pref %s was already pending\n",
|
||||||
meta_preference_to_string (pref));
|
meta_preference_to_string (pref));
|
||||||
|
|
||||||
/* add idle at priority below the gconf notify idle */
|
/* add idle at priority below the gconf notify idle */
|
||||||
if (changed_idle == 0)
|
if (changed_idle == 0)
|
||||||
@ -338,6 +346,9 @@ meta_prefs_init (void)
|
|||||||
|
|
||||||
/* commands */
|
/* commands */
|
||||||
init_commands ();
|
init_commands ();
|
||||||
|
|
||||||
|
/* workspace names */
|
||||||
|
init_workspace_names ();
|
||||||
|
|
||||||
gconf_client_notify_add (default_client, "/apps/metacity",
|
gconf_client_notify_add (default_client, "/apps/metacity",
|
||||||
change_notify,
|
change_notify,
|
||||||
@ -609,6 +620,22 @@ change_notify (GConfClient *client,
|
|||||||
if (update_command (key, str))
|
if (update_command (key, str))
|
||||||
queue_changed (META_PREF_COMMANDS);
|
queue_changed (META_PREF_COMMANDS);
|
||||||
}
|
}
|
||||||
|
else if (str_has_prefix (key, KEY_WORKSPACE_NAME_PREFIX))
|
||||||
|
{
|
||||||
|
const char *str;
|
||||||
|
|
||||||
|
if (value && value->type != GCONF_VALUE_STRING)
|
||||||
|
{
|
||||||
|
meta_warning (_("GConf key \"%s\" is set to an invalid type\n"),
|
||||||
|
key);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
str = value ? gconf_value_get_string (value) : NULL;
|
||||||
|
|
||||||
|
if (update_workspace_name (key, str))
|
||||||
|
queue_changed (META_PREF_WORKSPACE_NAMES);
|
||||||
|
}
|
||||||
else if (strcmp (key, KEY_BUTTON_LAYOUT) == 0)
|
else if (strcmp (key, KEY_BUTTON_LAYOUT) == 0)
|
||||||
{
|
{
|
||||||
const char *str;
|
const char *str;
|
||||||
@ -627,8 +654,8 @@ change_notify (GConfClient *client,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
meta_verbose ("Key %s doesn't mean anything to Metacity\n",
|
meta_topic (META_DEBUG_PREFS, "Key %s doesn't mean anything to Metacity\n",
|
||||||
key);
|
key);
|
||||||
}
|
}
|
||||||
|
|
||||||
out:
|
out:
|
||||||
@ -867,8 +894,8 @@ update_button_layout (const char *value)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
meta_verbose ("Ignoring unknown or already-used button name \"%s\"\n",
|
meta_topic (META_DEBUG_PREFS, "Ignoring unknown or already-used button name \"%s\"\n",
|
||||||
buttons[b]);
|
buttons[b]);
|
||||||
}
|
}
|
||||||
|
|
||||||
++b;
|
++b;
|
||||||
@ -905,8 +932,8 @@ update_button_layout (const char *value)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
meta_verbose ("Ignoring unknown or already-used button name \"%s\"\n",
|
meta_topic (META_DEBUG_PREFS, "Ignoring unknown or already-used button name \"%s\"\n",
|
||||||
buttons[b]);
|
buttons[b]);
|
||||||
}
|
}
|
||||||
|
|
||||||
++b;
|
++b;
|
||||||
@ -933,8 +960,6 @@ meta_prefs_get_titlebar_font (void)
|
|||||||
return titlebar_font;
|
return titlebar_font;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define MAX_REASONABLE_WORKSPACES 32
|
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
update_num_workspaces (int value)
|
update_num_workspaces (int value)
|
||||||
{
|
{
|
||||||
@ -1277,7 +1302,7 @@ init_commands (void)
|
|||||||
GError *err;
|
GError *err;
|
||||||
|
|
||||||
i = 0;
|
i = 0;
|
||||||
while (i < NUM_COMMANDS)
|
while (i < MAX_COMMANDS)
|
||||||
{
|
{
|
||||||
char *str_val;
|
char *str_val;
|
||||||
char *key;
|
char *key;
|
||||||
@ -1297,6 +1322,33 @@ init_commands (void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
init_workspace_names (void)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
GError *err;
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
while (i < MAX_REASONABLE_WORKSPACES)
|
||||||
|
{
|
||||||
|
char *str_val;
|
||||||
|
char *key;
|
||||||
|
|
||||||
|
key = gconf_key_for_workspace_name (i);
|
||||||
|
|
||||||
|
err = NULL;
|
||||||
|
str_val = gconf_client_get_string (default_client, key, &err);
|
||||||
|
cleanup_error (&err);
|
||||||
|
|
||||||
|
update_workspace_name (key, str_val);
|
||||||
|
|
||||||
|
g_free (str_val);
|
||||||
|
g_free (key);
|
||||||
|
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
update_binding (MetaKeyPref *binding,
|
update_binding (MetaKeyPref *binding,
|
||||||
const char *value)
|
const char *value)
|
||||||
@ -1424,13 +1476,21 @@ update_command (const char *name,
|
|||||||
i = atoi (p);
|
i = atoi (p);
|
||||||
i -= 1; /* count from 0 not 1 */
|
i -= 1; /* count from 0 not 1 */
|
||||||
|
|
||||||
if (i >= NUM_COMMANDS)
|
if (i >= MAX_COMMANDS)
|
||||||
{
|
{
|
||||||
meta_topic (META_DEBUG_KEYBINDINGS,
|
meta_topic (META_DEBUG_KEYBINDINGS,
|
||||||
"Command %d is too highly numbered, ignoring\n", i);
|
"Command %d is too highly numbered, ignoring\n", i);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((commands[i] == NULL && value == NULL) ||
|
||||||
|
(commands[i] && value && strcmp (commands[i], value) == 0))
|
||||||
|
{
|
||||||
|
meta_topic (META_DEBUG_KEYBINDINGS,
|
||||||
|
"Command %d is unchanged\n", i);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
g_free (commands[i]);
|
g_free (commands[i]);
|
||||||
commands[i] = g_strdup (value);
|
commands[i] = g_strdup (value);
|
||||||
|
|
||||||
@ -1444,7 +1504,7 @@ update_command (const char *name,
|
|||||||
const char*
|
const char*
|
||||||
meta_prefs_get_command (int i)
|
meta_prefs_get_command (int i)
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (i >= 0 && i < NUM_COMMANDS, NULL);
|
g_return_val_if_fail (i >= 0 && i < MAX_COMMANDS, NULL);
|
||||||
|
|
||||||
return commands[i];
|
return commands[i];
|
||||||
}
|
}
|
||||||
@ -1459,6 +1519,128 @@ meta_prefs_get_gconf_key_for_command (int i)
|
|||||||
return key;
|
return key;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
update_workspace_name (const char *name,
|
||||||
|
const char *value)
|
||||||
|
{
|
||||||
|
char *p;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
p = strrchr (name, '_');
|
||||||
|
if (p == NULL)
|
||||||
|
{
|
||||||
|
meta_topic (META_DEBUG_PREFS,
|
||||||
|
"Workspace name %s has no underscore?\n", name);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
++p;
|
||||||
|
|
||||||
|
if (!g_ascii_isdigit (*p))
|
||||||
|
{
|
||||||
|
meta_topic (META_DEBUG_PREFS,
|
||||||
|
"Workspace name %s doesn't end in number?\n", name);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
i = atoi (p);
|
||||||
|
i -= 1; /* count from 0 not 1 */
|
||||||
|
|
||||||
|
if (i >= MAX_REASONABLE_WORKSPACES)
|
||||||
|
{
|
||||||
|
meta_topic (META_DEBUG_PREFS,
|
||||||
|
"Workspace name %d is too highly numbered, ignoring\n", i);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((workspace_names[i] == NULL && value == NULL) ||
|
||||||
|
(workspace_names[i] && value && strcmp (workspace_names[i], value) == 0))
|
||||||
|
{
|
||||||
|
meta_topic (META_DEBUG_PREFS,
|
||||||
|
"Workspace name %d is unchanged\n", i);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
g_free (workspace_names[i]);
|
||||||
|
if (value != NULL)
|
||||||
|
workspace_names[i] = g_strdup (value);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* use a default name */
|
||||||
|
char *d;
|
||||||
|
d = g_strdup_printf (_("Workspace %d"), i + 1);
|
||||||
|
if (workspace_names[i] && strcmp (workspace_names[i], d) == 0)
|
||||||
|
{
|
||||||
|
g_free (d);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
workspace_names[i] = d;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
meta_topic (META_DEBUG_PREFS,
|
||||||
|
"Updated workspace name %d to \"%s\"\n",
|
||||||
|
i, workspace_names[i] ? workspace_names[i] : "none");
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char*
|
||||||
|
meta_prefs_get_workspace_name (int i)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (i >= 0 && i < MAX_REASONABLE_WORKSPACES, NULL);
|
||||||
|
|
||||||
|
return workspace_names[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
meta_prefs_change_workspace_name (int i,
|
||||||
|
const char *name)
|
||||||
|
{
|
||||||
|
char *key;
|
||||||
|
GError *err;
|
||||||
|
|
||||||
|
g_return_if_fail (i >= 0 && i < MAX_REASONABLE_WORKSPACES);
|
||||||
|
|
||||||
|
if ((name == NULL && workspace_names[i] == NULL) ||
|
||||||
|
(name && workspace_names[i] && strcmp (name, workspace_names[i]) == 0))
|
||||||
|
{
|
||||||
|
meta_topic (META_DEBUG_PREFS,
|
||||||
|
"Workspace %d already has name %s\n",
|
||||||
|
i, name ? name : "none");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
key = gconf_key_for_workspace_name (i);
|
||||||
|
|
||||||
|
err = NULL;
|
||||||
|
gconf_client_set_string (default_client,
|
||||||
|
key, name,
|
||||||
|
&err);
|
||||||
|
|
||||||
|
if (err)
|
||||||
|
{
|
||||||
|
meta_warning (_("Error setting name for workspace %d to \"%s\": %s\n"),
|
||||||
|
i, name ? name : "none",
|
||||||
|
err->message);
|
||||||
|
g_error_free (err);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_free (key);
|
||||||
|
}
|
||||||
|
|
||||||
|
static char*
|
||||||
|
gconf_key_for_workspace_name (int i)
|
||||||
|
{
|
||||||
|
char *key;
|
||||||
|
|
||||||
|
key = g_strdup_printf (KEY_WORKSPACE_NAME_PREFIX"%d", i + 1);
|
||||||
|
|
||||||
|
return key;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
meta_prefs_get_button_layout (MetaButtonLayout *button_layout_p)
|
meta_prefs_get_button_layout (MetaButtonLayout *button_layout_p)
|
||||||
{
|
{
|
||||||
|
@ -41,7 +41,8 @@ typedef enum
|
|||||||
META_PREF_SCREEN_KEYBINDINGS,
|
META_PREF_SCREEN_KEYBINDINGS,
|
||||||
META_PREF_DISABLE_WORKAROUNDS,
|
META_PREF_DISABLE_WORKAROUNDS,
|
||||||
META_PREF_COMMANDS,
|
META_PREF_COMMANDS,
|
||||||
META_PREF_BUTTON_LAYOUT
|
META_PREF_BUTTON_LAYOUT,
|
||||||
|
META_PREF_WORKSPACE_NAMES
|
||||||
} MetaPreference;
|
} MetaPreference;
|
||||||
|
|
||||||
typedef void (* MetaPrefsChangedFunc) (MetaPreference pref,
|
typedef void (* MetaPrefsChangedFunc) (MetaPreference pref,
|
||||||
@ -75,6 +76,10 @@ MetaActionDoubleClickTitlebar meta_prefs_get_action_double_click_titlebar (void)
|
|||||||
|
|
||||||
void meta_prefs_set_num_workspaces (int n_workspaces);
|
void meta_prefs_set_num_workspaces (int n_workspaces);
|
||||||
|
|
||||||
|
const char* meta_prefs_get_workspace_name (int i);
|
||||||
|
void meta_prefs_change_workspace_name (int i,
|
||||||
|
const char *name);
|
||||||
|
|
||||||
/* Screen bindings */
|
/* Screen bindings */
|
||||||
#define META_KEYBINDING_WORKSPACE_1 "switch_to_workspace_1"
|
#define META_KEYBINDING_WORKSPACE_1 "switch_to_workspace_1"
|
||||||
#define META_KEYBINDING_WORKSPACE_2 "switch_to_workspace_2"
|
#define META_KEYBINDING_WORKSPACE_2 "switch_to_workspace_2"
|
||||||
|
67
src/screen.c
67
src/screen.c
@ -51,6 +51,7 @@ static char* get_screen_name (MetaDisplay *display,
|
|||||||
|
|
||||||
static void update_num_workspaces (MetaScreen *screen);
|
static void update_num_workspaces (MetaScreen *screen);
|
||||||
static void update_focus_mode (MetaScreen *screen);
|
static void update_focus_mode (MetaScreen *screen);
|
||||||
|
static void update_workspace_names (MetaScreen *screen);
|
||||||
static void prefs_changed_callback (MetaPreference pref,
|
static void prefs_changed_callback (MetaPreference pref,
|
||||||
gpointer data);
|
gpointer data);
|
||||||
|
|
||||||
@ -727,6 +728,10 @@ prefs_changed_callback (MetaPreference pref,
|
|||||||
{
|
{
|
||||||
update_focus_mode (screen);
|
update_focus_mode (screen);
|
||||||
}
|
}
|
||||||
|
else if (pref == META_PREF_WORKSPACE_NAMES)
|
||||||
|
{
|
||||||
|
update_workspace_names (screen);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1130,7 +1135,7 @@ meta_screen_ensure_workspace_popup (MetaScreen *screen)
|
|||||||
g_assert (workspace);
|
g_assert (workspace);
|
||||||
|
|
||||||
entries[iter].key = (MetaTabEntryKey) workspace;
|
entries[iter].key = (MetaTabEntryKey) workspace;
|
||||||
entries[iter].title = workspace->name;
|
entries[iter].title = meta_workspace_get_name (workspace);
|
||||||
entries[iter].icon = NULL;
|
entries[iter].icon = NULL;
|
||||||
iter++;
|
iter++;
|
||||||
}
|
}
|
||||||
@ -1149,7 +1154,7 @@ meta_screen_ensure_workspace_popup (MetaScreen *screen)
|
|||||||
g_assert (workspace);
|
g_assert (workspace);
|
||||||
|
|
||||||
entries[i].key = (MetaTabEntryKey) workspace;
|
entries[i].key = (MetaTabEntryKey) workspace;
|
||||||
entries[i].title = workspace->name;
|
entries[i].title = meta_workspace_get_name (workspace);
|
||||||
entries[i].icon = NULL;
|
entries[i].icon = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1389,13 +1394,58 @@ meta_screen_update_workspace_layout (MetaScreen *screen)
|
|||||||
screen->starting_corner);
|
screen->starting_corner);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
update_workspace_names (MetaScreen *screen)
|
||||||
|
{
|
||||||
|
/* This updates names on root window when the pref changes,
|
||||||
|
* note we only get prefs change notify if things have
|
||||||
|
* really changed.
|
||||||
|
*/
|
||||||
|
GString *flattened;
|
||||||
|
int i;
|
||||||
|
int n_spaces;
|
||||||
|
|
||||||
|
/* flatten to nul-separated list */
|
||||||
|
n_spaces = meta_screen_get_n_workspaces (screen);
|
||||||
|
flattened = g_string_new ("");
|
||||||
|
i = 0;
|
||||||
|
while (i < n_spaces)
|
||||||
|
{
|
||||||
|
const char *name;
|
||||||
|
|
||||||
|
name = meta_prefs_get_workspace_name (i);
|
||||||
|
|
||||||
|
if (name)
|
||||||
|
g_string_append_len (flattened, name,
|
||||||
|
strlen (name) + 1);
|
||||||
|
else
|
||||||
|
g_string_append_len (flattened, "", 1);
|
||||||
|
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
|
||||||
|
meta_error_trap_push (screen->display);
|
||||||
|
XChangeProperty (screen->display->xdisplay,
|
||||||
|
screen->xroot,
|
||||||
|
screen->display->atom_net_desktop_names,
|
||||||
|
screen->display->atom_utf8_string,
|
||||||
|
8, PropModeReplace,
|
||||||
|
flattened->str, flattened->len);
|
||||||
|
meta_error_trap_pop (screen->display, FALSE);
|
||||||
|
|
||||||
|
g_string_free (flattened, TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
meta_screen_update_workspace_names (MetaScreen *screen)
|
meta_screen_update_workspace_names (MetaScreen *screen)
|
||||||
{
|
{
|
||||||
char **names;
|
char **names;
|
||||||
int n_names;
|
int n_names;
|
||||||
int i;
|
int i;
|
||||||
GList *tmp;
|
|
||||||
|
/* this updates names in prefs when the root window property changes,
|
||||||
|
* iff the new property contents don't match what's already in prefs
|
||||||
|
*/
|
||||||
|
|
||||||
names = NULL;
|
names = NULL;
|
||||||
n_names = 0;
|
n_names = 0;
|
||||||
@ -1410,16 +1460,11 @@ meta_screen_update_workspace_names (MetaScreen *screen)
|
|||||||
}
|
}
|
||||||
|
|
||||||
i = 0;
|
i = 0;
|
||||||
tmp = screen->workspaces;
|
while (i < n_names)
|
||||||
while (tmp != NULL && i < n_names)
|
|
||||||
{
|
{
|
||||||
MetaWorkspace *w = tmp->data;
|
meta_prefs_change_workspace_name (i, names[i]);
|
||||||
|
|
||||||
meta_workspace_set_name (w, names[i]);
|
|
||||||
|
|
||||||
++i;
|
|
||||||
|
|
||||||
tmp = tmp->next;
|
++i;
|
||||||
}
|
}
|
||||||
|
|
||||||
g_strfreev (names);
|
g_strfreev (names);
|
||||||
|
@ -260,6 +260,8 @@ topic_name (MetaDebugTopic topic)
|
|||||||
return "ERRORS";
|
return "ERRORS";
|
||||||
case META_DEBUG_STARTUP:
|
case META_DEBUG_STARTUP:
|
||||||
return "STARTUP";
|
return "STARTUP";
|
||||||
|
case META_DEBUG_PREFS:
|
||||||
|
return "PREFS";
|
||||||
}
|
}
|
||||||
|
|
||||||
return "Window manager";
|
return "Window manager";
|
||||||
|
@ -61,7 +61,8 @@ typedef enum
|
|||||||
META_DEBUG_KEYBINDINGS = 1 << 12,
|
META_DEBUG_KEYBINDINGS = 1 << 12,
|
||||||
META_DEBUG_SYNC = 1 << 13,
|
META_DEBUG_SYNC = 1 << 13,
|
||||||
META_DEBUG_ERRORS = 1 << 14,
|
META_DEBUG_ERRORS = 1 << 14,
|
||||||
META_DEBUG_STARTUP = 1 << 15
|
META_DEBUG_STARTUP = 1 << 15,
|
||||||
|
META_DEBUG_PREFS = 1 << 16
|
||||||
|
|
||||||
} MetaDebugTopic;
|
} MetaDebugTopic;
|
||||||
|
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
#include <config.h>
|
#include <config.h>
|
||||||
#include "workspace.h"
|
#include "workspace.h"
|
||||||
#include "errors.h"
|
#include "errors.h"
|
||||||
|
#include "prefs.h"
|
||||||
#include <X11/Xatom.h>
|
#include <X11/Xatom.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
@ -46,9 +47,6 @@ meta_workspace_new (MetaScreen *screen)
|
|||||||
workspace->work_area.width = screen->width;
|
workspace->work_area.width = screen->width;
|
||||||
workspace->work_area.height = screen->height;
|
workspace->work_area.height = screen->height;
|
||||||
workspace->work_area_invalid = TRUE;
|
workspace->work_area_invalid = TRUE;
|
||||||
|
|
||||||
workspace->name = g_strdup_printf (_("Workspace %d"),
|
|
||||||
meta_workspace_index (workspace) + 1);
|
|
||||||
|
|
||||||
return workspace;
|
return workspace;
|
||||||
}
|
}
|
||||||
@ -85,8 +83,6 @@ meta_workspace_free (MetaWorkspace *workspace)
|
|||||||
|
|
||||||
workspace->screen->workspaces =
|
workspace->screen->workspaces =
|
||||||
g_list_remove (workspace->screen->workspaces, workspace);
|
g_list_remove (workspace->screen->workspaces, workspace);
|
||||||
|
|
||||||
g_free (workspace->name);
|
|
||||||
|
|
||||||
g_free (workspace);
|
g_free (workspace);
|
||||||
|
|
||||||
@ -520,16 +516,8 @@ meta_workspace_get_neighbor (MetaWorkspace *workspace,
|
|||||||
i);
|
i);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
const char*
|
||||||
meta_workspace_set_name (MetaWorkspace *workspace,
|
meta_workspace_get_name (MetaWorkspace *workspace)
|
||||||
const char *name)
|
|
||||||
{
|
{
|
||||||
if (strcmp (name, workspace->name) == 0)
|
return meta_prefs_get_workspace_name (meta_workspace_index (workspace));
|
||||||
return;
|
|
||||||
|
|
||||||
g_free (workspace->name);
|
|
||||||
workspace->name = g_strdup (name);
|
|
||||||
|
|
||||||
meta_verbose ("Workspace has new name \"%s\"\n",
|
|
||||||
workspace->name);
|
|
||||||
}
|
}
|
||||||
|
@ -40,8 +40,6 @@ struct _MetaWorkspace
|
|||||||
MetaScreen *screen;
|
MetaScreen *screen;
|
||||||
|
|
||||||
GList *windows;
|
GList *windows;
|
||||||
|
|
||||||
char *name;
|
|
||||||
|
|
||||||
MetaRectangle work_area;
|
MetaRectangle work_area;
|
||||||
guint work_area_invalid : 1;
|
guint work_area_invalid : 1;
|
||||||
@ -70,8 +68,7 @@ void meta_workspace_get_work_area (MetaWorkspace *workspace,
|
|||||||
MetaWorkspace* meta_workspace_get_neighbor (MetaWorkspace *workspace,
|
MetaWorkspace* meta_workspace_get_neighbor (MetaWorkspace *workspace,
|
||||||
MetaMotionDirection direction);
|
MetaMotionDirection direction);
|
||||||
|
|
||||||
void meta_workspace_set_name (MetaWorkspace *workspace,
|
const char* meta_workspace_get_name (MetaWorkspace *workspace);
|
||||||
const char *name);
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user