Show the real workspace names in the window menu

This commit is contained in:
Ross Burton 2002-07-23 20:52:22 +00:00
parent 197c81178c
commit f51eed31d8
4 changed files with 92 additions and 7 deletions

View File

@ -1,3 +1,8 @@
2002-07-23 Ross Burton <ross@burtonini.com>
* src/menu.c (meta_window_menu_new): Use the real workspace names
instead of making up numbers.
2002-07-23 Havoc Pennington <hp@redhat.com> 2002-07-23 Havoc Pennington <hp@redhat.com>
* src/keybindings.c (meta_display_process_key_event): handle * src/keybindings.c (meta_display_process_key_event): handle

View File

@ -506,6 +506,18 @@ meta_core_show_window_menu (Display *xdisplay,
meta_window_show_menu (window, root_x, root_y, button, timestamp); meta_window_show_menu (window, root_x, root_y, button, timestamp);
} }
char *
meta_core_get_workspace_name_with_index (Display *xdisplay,
int index)
{
MetaDisplay *display;
MetaWorkspace *workspace;
display = meta_display_for_x_display (xdisplay);
workspace = meta_display_get_workspace_by_index (display, index);
return (workspace != NULL) ? workspace->name : NULL;
}
gboolean gboolean
meta_core_begin_grab_op (Display *xdisplay, meta_core_begin_grab_op (Display *xdisplay,
Window frame_xwindow, Window frame_xwindow,

View File

@ -98,6 +98,8 @@ 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,
int index);
void meta_core_get_frame_extents (Display *xdisplay, void meta_core_get_frame_extents (Display *xdisplay,
Window frame_xwindow, Window frame_xwindow,

View File

@ -20,6 +20,7 @@
*/ */
#include <config.h> #include <config.h>
#include <stdio.h>
#include "menu.h" #include "menu.h"
#include "main.h" #include "main.h"
#include "util.h" #include "util.h"
@ -152,6 +153,69 @@ menu_icon_expose_func (MetaArea *area,
type); type);
} }
/*
* Given a Display and an index, get the workspace name and add any
* accelerators. At the moment this means adding a _ if the name is of
* the form "Workspace n" where n is less than 10, and escaping any
* other '_'s so they do not create inadvertant accelerators.
*
* The calling code owns the string, and is reponsible to free the
* memory after use.
*/
static char *
get_workspace_name_with_accel (Display *display,
int index)
{
char *name;
unsigned int number;
name = meta_core_get_workspace_name_with_index (display, index);
/*
* If the name is of the form "Workspace x" where x is an unsigned
* integer, insert a '_' before the number if it is less than 10 and
* return it
*/
if (sscanf (name, _("Workspace %u"), &number) == 1)
{
/*
* Above name is a pointer into the Workspace struct. Here we make
* a copy copy so we can have our wicked way with it.
*/
name = g_strdup_printf (_("Workspace %s%d"),
number < 10 ? "_" : "",
number);
return name;
}
else
{
/*
* Otherwise this is just a normal name to which we cannot really
* add accelerators. Escape any _ characters so that the user's
* workspace names do not get mangled.
*/
char *new_name, *source, *dest;
source = name;
/*
* Assume the worst case, that every character is a _
*/
dest = new_name = g_malloc0 (strlen (name) * 2);
/*
* Now iterate down the strings, adding '_' to escape as we go
*/
while (*source != '\0')
{
if (*source == '_')
*dest++ = '_';
*dest++ = *source++;
}
/*
* We don't free *name as we don't own it, and pass ownership of
* *new_name to the calling code.
*/
return new_name;
}
}
MetaWindowMenu* MetaWindowMenu*
meta_window_menu_new (MetaFrames *frames, meta_window_menu_new (MetaFrames *frames,
@ -290,22 +354,24 @@ meta_window_menu_new (MetaFrames *frames,
if (n_workspaces > 0) if (n_workspaces > 0)
{ {
GtkWidget *mi; GtkWidget *mi;
Display *display;
display = gdk_x11_drawable_get_xdisplay(GTK_WIDGET(frames)->window);
i = 0; i = 0;
while (i < n_workspaces) while (i < n_workspaces)
{ {
char *label; char *label, *name;
MenuData *md; MenuData *md;
name = get_workspace_name_with_accel (display, i);
if (ops & META_MENU_OP_UNSTICK) if (ops & META_MENU_OP_UNSTICK)
label = g_strdup_printf (_("Only on workspace %s%d"), label = g_strdup_printf (_("Only on %s"), name);
i < 9 ? "_" : "", i + 1);
else else
label = g_strdup_printf (_("Move to workspace %s%d"), label = g_strdup_printf(_("Move to %s"), name);
i < 9 ? "_" : "", i + 1);
mi = gtk_menu_item_new_with_mnemonic (label); mi = gtk_menu_item_new_with_mnemonic (label);
g_free (name);
g_free (label); g_free (label);
if (!(ops & META_MENU_OP_UNSTICK) && if (!(ops & META_MENU_OP_UNSTICK) &&