Add some padding to the label so that the title doesn't move around when
* e-shell-folder-title-bar.c (e_shell_folder_title_bar_construct): Add some padding to the label so that the title doesn't move around when you switch between pop-up and non-pop-up folder bar. Also, change all the GtkLabels to be GtkClippedLabels instead. (e_shell_folder_title_bar_set_title): Updated to use EClippedLabels instead of GtkLabels. (e_shell_folder_title_bar_set_folder_bar_label): Likewise. * e-shell.c (impl_Shell__get_displayName): New, implementation for the `displayName' attribute. * Evolution-Shell.idl: Added readonly attribute `displayName' to get the canonicalized X11 display name for the shell. * e-shell.c (e_shell_construct): Ooops. Return `E_SHELL_CONSTRUCT_RESULT_CANNOTREGISTER' if the OAF registration fails, not `E_SHELL_CONSTRUCT_RESULT_GENERICERROR'. * e-shortcuts-view.c (rename_group_cb): Get the toplevel from the shortcuts view, not the widget. (rename_shortcut_cb): Likewise. (show_new_group_dialog): Changed to use `e_request_string()'. * evolution-test-component.c: Add the %FALSE value for the `user_creatable' field in the `folder_types' entry. * evolution-shell-client.c: New member `shortcuts_interface' in `EvolutionShellClientPrivate'. (destroy): Unref it if not CORBA_OBJECT_NIL. (init): Init to CORBA_OBJECT_NIL. (query_shell_interface): New helper function to query an interface on the shell and spit out warnings if it fails. (evolution_shell_client_construct): Use it to query the ::Activity interface. Also query the ::Shortcuts interface and set the `shortcuts_interface' member to point to it. * e-shell.c: New member `corba_shortcuts' in `EShellPrivate'. (init): Init to NULL. (setup_shortcuts_interface): Helper function to add the ::Shortcuts CORBA interface to the shell. (e_shell_construct): Call it. * e-corba-shortcuts.c, e-corba-shortcuts.h: New objects implementing the `Evolution::Shortcuts' CORBA interface. * Evolution-Shortcuts.idl: New interface for accessing the shortcuts in the shell. * e-shell.c (e_shell_get_config_db): Moved down. svn path=/trunk/; revision=11689
This commit is contained in:
@ -1,3 +1,55 @@
|
||||
2001-08-04 Ettore Perazzoli <ettore@ximian.com>
|
||||
|
||||
* e-shell-folder-title-bar.c (e_shell_folder_title_bar_construct):
|
||||
Add some padding to the label so that the title doesn't move
|
||||
around when you switch between pop-up and non-pop-up folder bar.
|
||||
Also, change all the GtkLabels to be GtkClippedLabels instead.
|
||||
(e_shell_folder_title_bar_set_title): Updated to use
|
||||
EClippedLabels instead of GtkLabels.
|
||||
(e_shell_folder_title_bar_set_folder_bar_label): Likewise.
|
||||
|
||||
* e-shell.c (impl_Shell__get_displayName): New, implementation for
|
||||
the `displayName' attribute.
|
||||
|
||||
* Evolution-Shell.idl: Added readonly attribute `displayName' to
|
||||
get the canonicalized X11 display name for the shell.
|
||||
|
||||
* e-shell.c (e_shell_construct): Ooops. Return
|
||||
`E_SHELL_CONSTRUCT_RESULT_CANNOTREGISTER' if the OAF registration
|
||||
fails, not `E_SHELL_CONSTRUCT_RESULT_GENERICERROR'.
|
||||
|
||||
* e-shortcuts-view.c (rename_group_cb): Get the toplevel from the
|
||||
shortcuts view, not the widget.
|
||||
(rename_shortcut_cb): Likewise.
|
||||
(show_new_group_dialog): Changed to use `e_request_string()'.
|
||||
|
||||
* evolution-test-component.c: Add the %FALSE value for the
|
||||
`user_creatable' field in the `folder_types' entry.
|
||||
|
||||
* evolution-shell-client.c: New member `shortcuts_interface' in
|
||||
`EvolutionShellClientPrivate'.
|
||||
(destroy): Unref it if not CORBA_OBJECT_NIL.
|
||||
(init): Init to CORBA_OBJECT_NIL.
|
||||
(query_shell_interface): New helper function to query an interface
|
||||
on the shell and spit out warnings if it fails.
|
||||
(evolution_shell_client_construct): Use it to query the ::Activity
|
||||
interface. Also query the ::Shortcuts interface and set the
|
||||
`shortcuts_interface' member to point to it.
|
||||
|
||||
* e-shell.c: New member `corba_shortcuts' in `EShellPrivate'.
|
||||
(init): Init to NULL.
|
||||
(setup_shortcuts_interface): Helper function to add the
|
||||
::Shortcuts CORBA interface to the shell.
|
||||
(e_shell_construct): Call it.
|
||||
|
||||
* e-corba-shortcuts.c, e-corba-shortcuts.h: New objects
|
||||
implementing the `Evolution::Shortcuts' CORBA interface.
|
||||
|
||||
* Evolution-Shortcuts.idl: New interface for accessing the
|
||||
shortcuts in the shell.
|
||||
|
||||
* e-shell.c (e_shell_get_config_db): Moved down.
|
||||
|
||||
2001-08-03 Christopher James Lahey <clahey@ximian.com>
|
||||
|
||||
* e-storage-set-view.c (tree_drag_data_received): Some paths here
|
||||
|
||||
@ -25,6 +25,9 @@ module Evolution {
|
||||
|
||||
typedef sequence<string> FolderTypeNameList;
|
||||
|
||||
/* The X display name. */
|
||||
readonly attribute string displayName;
|
||||
|
||||
/**
|
||||
* getComponentByType:
|
||||
* @type: name of a valid folder type
|
||||
|
||||
51
shell/Evolution-Shortcuts.idl
Normal file
51
shell/Evolution-Shortcuts.idl
Normal file
@ -0,0 +1,51 @@
|
||||
/* -*- Mode: IDL; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
|
||||
/*
|
||||
* Interface for the Evolution shortcuts.
|
||||
*
|
||||
* Authors:
|
||||
* Ettore Perazzoli <ettore@ximian.com>
|
||||
*
|
||||
* Copyright (C) 2001 Ximian, Inc.
|
||||
*/
|
||||
|
||||
#include <Bonobo.idl>
|
||||
|
||||
module GNOME {
|
||||
module Evolution {
|
||||
|
||||
interface Shortcuts : Bonobo::Unknown {
|
||||
|
||||
struct Shortcut {
|
||||
string uri;
|
||||
string name;
|
||||
string type;
|
||||
};
|
||||
typedef sequence <Shortcut> ShortcutList;
|
||||
|
||||
struct Group {
|
||||
string name;
|
||||
ShortcutList shortcuts;
|
||||
};
|
||||
typedef sequence<Group> GroupList;
|
||||
|
||||
exception NotFound {};
|
||||
|
||||
readonly attribute GroupList groups; // FIXME: Could be non-readonly
|
||||
|
||||
void add (in short group_num, in short position, in Shortcut shortcut)
|
||||
raises (NotFound);
|
||||
void remove (in short group_num, in short item_num)
|
||||
raises (NotFound);
|
||||
Shortcut get (in short group_num, in short item_num)
|
||||
raises (NotFound);
|
||||
|
||||
void addGroup (in short position, in string name);
|
||||
void removeGroup (in short group_num)
|
||||
raises (NotFound);
|
||||
Group getGroup (in short group_num)
|
||||
raises (NotFound);
|
||||
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
@ -17,6 +17,7 @@
|
||||
#include <Evolution-ShellComponentDnd.idl>
|
||||
#include <Evolution-Offline.idl>
|
||||
#include <Evolution-ShellView.idl>
|
||||
#include <Evolution-Shortcuts.idl>
|
||||
#include <Evolution-Storage.idl>
|
||||
#include <Evolution-StorageSetView.idl>
|
||||
#include <Evolution-Shell.idl>
|
||||
|
||||
@ -26,6 +26,7 @@ IDLS = \
|
||||
Evolution-ShellComponent.idl \
|
||||
Evolution-ShellComponentDnd.idl \
|
||||
Evolution-ShellView.idl \
|
||||
Evolution-Shortcuts.idl \
|
||||
Evolution-Storage.idl \
|
||||
Evolution-StorageSetView.idl \
|
||||
Evolution.idl
|
||||
@ -95,6 +96,8 @@ evolution_SOURCES = \
|
||||
e-activity-handler.h \
|
||||
e-component-registry.c \
|
||||
e-component-registry.h \
|
||||
e-corba-shortcuts.c \
|
||||
e-corba-shortcuts.h \
|
||||
e-corba-storage-registry.c \
|
||||
e-corba-storage-registry.h \
|
||||
e-corba-storage.c \
|
||||
|
||||
317
shell/e-corba-shortcuts.c
Normal file
317
shell/e-corba-shortcuts.c
Normal file
@ -0,0 +1,317 @@
|
||||
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
|
||||
/* e-corba-shortcuts.c
|
||||
*
|
||||
* Copyright (C) 2001 Ximian, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public
|
||||
* License along with this program; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* Author: Ettore Perazzoli <ettore@ximian.com>
|
||||
*/
|
||||
|
||||
/* FIXME: Doesn't throw exceptions properly. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include "e-corba-shortcuts.h"
|
||||
|
||||
#include "e-util/e-corba-utils.h"
|
||||
|
||||
#include <gal/util/e-util.h>
|
||||
|
||||
|
||||
#define PARENT_TYPE bonobo_x_object_get_type ()
|
||||
static BonoboXObjectClass *parent_class = NULL;
|
||||
|
||||
struct _ECorbaShortcutsPrivate {
|
||||
EShortcuts *shortcuts;
|
||||
};
|
||||
|
||||
|
||||
/* Utility functions. */
|
||||
|
||||
static const char *
|
||||
string_from_corba (CORBA_char *corba_string)
|
||||
{
|
||||
if (corba_string[0] == '\0')
|
||||
return NULL;
|
||||
|
||||
return corba_string;
|
||||
}
|
||||
|
||||
static void
|
||||
shortcut_list_to_corba (const GSList *shortcut_list,
|
||||
GNOME_Evolution_Shortcuts_ShortcutList *shortcut_list_return)
|
||||
{
|
||||
GNOME_Evolution_Shortcuts_Shortcut *buffer;
|
||||
const GSList *p;
|
||||
int num_shortcuts;
|
||||
int i;
|
||||
|
||||
num_shortcuts = g_slist_length ((GSList *) shortcut_list); /* safe cast, GLib sucks */
|
||||
|
||||
shortcut_list_return->_maximum = num_shortcuts;
|
||||
shortcut_list_return->_length = num_shortcuts;
|
||||
|
||||
buffer = CORBA_sequence_GNOME_Evolution_Shortcuts_Shortcut_allocbuf (num_shortcuts);
|
||||
shortcut_list_return->_buffer = buffer;
|
||||
|
||||
for (p = shortcut_list, i = 0; p != NULL; p = p->next, i++) {
|
||||
const EShortcutItem *item;
|
||||
|
||||
item = (const EShortcutItem *) p->data;
|
||||
|
||||
buffer[i].uri = CORBA_string_dup (e_safe_corba_string (item->uri));
|
||||
buffer[i].name = CORBA_string_dup (e_safe_corba_string (item->name));
|
||||
buffer[i].type = CORBA_string_dup (e_safe_corba_string (item->type));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* GtkObject methods. */
|
||||
|
||||
static void
|
||||
impl_destroy (GtkObject *object)
|
||||
{
|
||||
ECorbaShortcuts *corba_shortcuts;
|
||||
ECorbaShortcutsPrivate *priv;
|
||||
|
||||
corba_shortcuts = E_CORBA_SHORTCUTS (object);
|
||||
priv = corba_shortcuts->priv;
|
||||
|
||||
gtk_object_unref (GTK_OBJECT (priv->shortcuts));
|
||||
|
||||
g_free (priv);
|
||||
|
||||
(* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
impl_add (PortableServer_Servant servant,
|
||||
const CORBA_short group_num,
|
||||
const CORBA_short position,
|
||||
const GNOME_Evolution_Shortcuts_Shortcut *shortcut,
|
||||
CORBA_Environment *ev)
|
||||
{
|
||||
ECorbaShortcuts *corba_shortcuts;
|
||||
ECorbaShortcutsPrivate *priv;
|
||||
|
||||
corba_shortcuts = E_CORBA_SHORTCUTS (bonobo_object_from_servant (servant));
|
||||
priv = corba_shortcuts->priv;
|
||||
|
||||
e_shortcuts_add_shortcut (priv->shortcuts, group_num, position,
|
||||
string_from_corba (shortcut->uri),
|
||||
string_from_corba (shortcut->name),
|
||||
0,
|
||||
string_from_corba (shortcut->type));
|
||||
}
|
||||
|
||||
static void
|
||||
impl_remove (PortableServer_Servant servant,
|
||||
const CORBA_short group_num,
|
||||
const CORBA_short item_num,
|
||||
CORBA_Environment *ev)
|
||||
{
|
||||
ECorbaShortcuts *corba_shortcuts;
|
||||
ECorbaShortcutsPrivate *priv;
|
||||
|
||||
corba_shortcuts = E_CORBA_SHORTCUTS (bonobo_object_from_servant (servant));
|
||||
priv = corba_shortcuts->priv;
|
||||
|
||||
e_shortcuts_remove_shortcut (priv->shortcuts, group_num, item_num);
|
||||
}
|
||||
|
||||
static GNOME_Evolution_Shortcuts_Shortcut *
|
||||
impl_get (PortableServer_Servant servant,
|
||||
const CORBA_short group_num,
|
||||
const CORBA_short item_num,
|
||||
CORBA_Environment *ev)
|
||||
{
|
||||
ECorbaShortcuts *corba_shortcuts;
|
||||
ECorbaShortcutsPrivate *priv;
|
||||
GNOME_Evolution_Shortcuts_Shortcut *retval;
|
||||
const EShortcutItem *item;
|
||||
|
||||
corba_shortcuts = E_CORBA_SHORTCUTS (bonobo_object_from_servant (servant));
|
||||
priv = corba_shortcuts->priv;
|
||||
|
||||
item = e_shortcuts_get_shortcut (priv->shortcuts, group_num, item_num);
|
||||
if (item == NULL) {
|
||||
CORBA_exception_set (ev, CORBA_USER_EXCEPTION,
|
||||
ex_GNOME_Evolution_Shortcuts_NotFound, NULL);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
retval = GNOME_Evolution_Shortcuts_Shortcut__alloc ();
|
||||
retval->uri = CORBA_string_dup (e_safe_corba_string (item->uri));
|
||||
retval->name = CORBA_string_dup (e_safe_corba_string (item->name));
|
||||
retval->type = CORBA_string_dup (e_safe_corba_string (item->type));
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
static void
|
||||
impl_addGroup (PortableServer_Servant servant,
|
||||
const CORBA_short position,
|
||||
const CORBA_char *name,
|
||||
CORBA_Environment *ev)
|
||||
{
|
||||
ECorbaShortcuts *corba_shortcuts;
|
||||
ECorbaShortcutsPrivate *priv;
|
||||
|
||||
corba_shortcuts = E_CORBA_SHORTCUTS (bonobo_object_from_servant (servant));
|
||||
priv = corba_shortcuts->priv;
|
||||
|
||||
e_shortcuts_add_group (priv->shortcuts, position, name);
|
||||
}
|
||||
|
||||
static void
|
||||
impl_removeGroup (PortableServer_Servant servant,
|
||||
const CORBA_short group_num,
|
||||
CORBA_Environment *ev)
|
||||
{
|
||||
ECorbaShortcuts *corba_shortcuts;
|
||||
ECorbaShortcutsPrivate *priv;
|
||||
|
||||
corba_shortcuts = E_CORBA_SHORTCUTS (bonobo_object_from_servant (servant));
|
||||
priv = corba_shortcuts->priv;
|
||||
|
||||
e_shortcuts_remove_group (priv->shortcuts, group_num);
|
||||
}
|
||||
|
||||
static GNOME_Evolution_Shortcuts_Group *
|
||||
impl_getGroup (PortableServer_Servant servant,
|
||||
const CORBA_short group_num,
|
||||
CORBA_Environment *ev)
|
||||
{
|
||||
ECorbaShortcuts *corba_shortcuts;
|
||||
ECorbaShortcutsPrivate *priv;
|
||||
GNOME_Evolution_Shortcuts_Group *group;
|
||||
const GSList *list;
|
||||
|
||||
corba_shortcuts = E_CORBA_SHORTCUTS (bonobo_object_from_servant (servant));
|
||||
priv = corba_shortcuts->priv;
|
||||
|
||||
list = e_shortcuts_get_shortcuts_in_group (priv->shortcuts, group_num);
|
||||
|
||||
group = GNOME_Evolution_Shortcuts_Group__alloc ();
|
||||
|
||||
group->name = CORBA_string_dup (e_shortcuts_get_group_title (priv->shortcuts, group_num));
|
||||
|
||||
shortcut_list_to_corba (list, & group->shortcuts);
|
||||
|
||||
return group;
|
||||
}
|
||||
|
||||
static CORBA_sequence_GNOME_Evolution_Shortcuts_Group *
|
||||
impl__get_groups (PortableServer_Servant servant,
|
||||
CORBA_Environment *ev)
|
||||
{
|
||||
GNOME_Evolution_Shortcuts_GroupList *list;
|
||||
ECorbaShortcuts *corba_shortcuts;
|
||||
ECorbaShortcutsPrivate *priv;
|
||||
GSList *group_titles;
|
||||
const GSList *p;
|
||||
int i;
|
||||
|
||||
corba_shortcuts = E_CORBA_SHORTCUTS (bonobo_object_from_servant (servant));
|
||||
priv = corba_shortcuts->priv;
|
||||
|
||||
list = GNOME_Evolution_Shortcuts_GroupList__alloc ();
|
||||
list->_length = e_shortcuts_get_num_groups (priv->shortcuts);
|
||||
list->_maximum = list->_length;
|
||||
list->_buffer = CORBA_sequence_GNOME_Evolution_Shortcuts_Group_allocbuf (list->_maximum);
|
||||
|
||||
CORBA_sequence_set_release (list, TRUE);
|
||||
|
||||
group_titles = e_shortcuts_get_group_titles (priv->shortcuts);
|
||||
for (p = group_titles, i = 0; p != NULL; p = p->next, i ++) {
|
||||
char *group_title;
|
||||
const GSList *shortcuts;
|
||||
|
||||
group_title = (char *) p->data;
|
||||
|
||||
shortcuts = e_shortcuts_get_shortcuts_in_group (priv->shortcuts, i);
|
||||
|
||||
list->_buffer[i].name = CORBA_string_dup (group_title);
|
||||
shortcut_list_to_corba (shortcuts, &list->_buffer[i].shortcuts);
|
||||
|
||||
g_free (group_title);
|
||||
}
|
||||
|
||||
g_slist_free (group_titles);
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
class_init (GtkObjectClass *object_class)
|
||||
{
|
||||
ECorbaShortcutsClass *corba_shortcuts_class;
|
||||
POA_GNOME_Evolution_Shortcuts__epv *epv;
|
||||
|
||||
parent_class = gtk_type_class (PARENT_TYPE);
|
||||
|
||||
object_class->destroy = impl_destroy;
|
||||
|
||||
corba_shortcuts_class = E_CORBA_SHORTCUTS_CLASS (object_class);
|
||||
|
||||
epv = & corba_shortcuts_class->epv;
|
||||
epv->add = impl_add;
|
||||
epv->remove = impl_remove;
|
||||
epv->get = impl_get;
|
||||
epv->addGroup = impl_addGroup;
|
||||
epv->removeGroup = impl_removeGroup;
|
||||
epv->getGroup = impl_getGroup;
|
||||
epv->_get_groups = impl__get_groups;
|
||||
}
|
||||
|
||||
static void
|
||||
init (ECorbaShortcuts *corba_shortcuts)
|
||||
{
|
||||
ECorbaShortcutsPrivate *priv;
|
||||
|
||||
priv = g_new (ECorbaShortcutsPrivate, 1);
|
||||
priv->shortcuts = NULL;
|
||||
|
||||
corba_shortcuts->priv = priv;
|
||||
}
|
||||
|
||||
|
||||
ECorbaShortcuts *
|
||||
e_corba_shortcuts_new (EShortcuts *shortcuts)
|
||||
{
|
||||
ECorbaShortcuts *corba_shortcuts;
|
||||
|
||||
g_return_val_if_fail (shortcuts != NULL, NULL);
|
||||
g_return_val_if_fail (E_IS_SHORTCUTS (shortcuts), NULL);
|
||||
|
||||
corba_shortcuts = gtk_type_new (e_corba_shortcuts_get_type ());
|
||||
|
||||
gtk_object_ref (GTK_OBJECT (shortcuts));
|
||||
corba_shortcuts->priv->shortcuts = shortcuts;
|
||||
|
||||
return corba_shortcuts;
|
||||
}
|
||||
|
||||
|
||||
E_MAKE_X_TYPE (e_corba_shortcuts, "ECorbaShortcuts", ECorbaShortcuts,
|
||||
class_init, init, PARENT_TYPE,
|
||||
POA_GNOME_Evolution_Shortcuts__init,
|
||||
GTK_STRUCT_OFFSET (ECorbaShortcutsClass, epv))
|
||||
67
shell/e-corba-shortcuts.h
Normal file
67
shell/e-corba-shortcuts.h
Normal file
@ -0,0 +1,67 @@
|
||||
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
|
||||
/* e-corba-shortcuts.h
|
||||
*
|
||||
* Copyright (C) 2001 Ximian, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public
|
||||
* License along with this program; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* Author: Ettore Perazzoli <ettore@ximian.com>
|
||||
*/
|
||||
|
||||
#ifndef _E_CORBA_SHORTCUTS_H_
|
||||
#define _E_CORBA_SHORTCUTS_H_
|
||||
|
||||
#include "e-shortcuts.h"
|
||||
|
||||
#include <bonobo/bonobo-xobject.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#pragma }
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#define E_TYPE_CORBA_SHORTCUTS (e_corba_shortcuts_get_type ())
|
||||
#define E_CORBA_SHORTCUTS(obj) (GTK_CHECK_CAST ((obj), E_TYPE_CORBA_SHORTCUTS, ECorbaShortcuts))
|
||||
#define E_CORBA_SHORTCUTS_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_CORBA_SHORTCUTS, ECorbaShortcutsClass))
|
||||
#define E_IS_CORBA_SHORTCUTS(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_CORBA_SHORTCUTS))
|
||||
#define E_IS_CORBA_SHORTCUTS_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_CORBA_SHORTCUTS))
|
||||
|
||||
|
||||
typedef struct _ECorbaShortcuts ECorbaShortcuts;
|
||||
typedef struct _ECorbaShortcutsPrivate ECorbaShortcutsPrivate;
|
||||
typedef struct _ECorbaShortcutsClass ECorbaShortcutsClass;
|
||||
|
||||
struct _ECorbaShortcuts {
|
||||
BonoboXObject parent;
|
||||
|
||||
ECorbaShortcutsPrivate *priv;
|
||||
};
|
||||
|
||||
struct _ECorbaShortcutsClass {
|
||||
BonoboXObjectClass parent_class;
|
||||
|
||||
POA_GNOME_Evolution_Shortcuts__epv epv;
|
||||
};
|
||||
|
||||
|
||||
GtkType e_corba_shortcuts_get_type (void);
|
||||
ECorbaShortcuts *e_corba_shortcuts_new (EShortcuts *shortcuts);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* _E_CORBA_SHORTCUTS_H_ */
|
||||
@ -379,15 +379,15 @@ e_shell_folder_title_bar_construct (EShellFolderTitleBar *folder_title_bar)
|
||||
priv = folder_title_bar->priv;
|
||||
widget = GTK_WIDGET (folder_title_bar);
|
||||
|
||||
priv->label = gtk_label_new ("");
|
||||
priv->label = e_clipped_label_new ("");
|
||||
gtk_misc_set_padding (GTK_MISC (priv->label), 5, 0);
|
||||
gtk_misc_set_alignment (GTK_MISC (priv->label), 0.0, 0.5);
|
||||
|
||||
priv->folder_bar_label = gtk_label_new ("");
|
||||
priv->folder_bar_label = e_clipped_label_new ("");
|
||||
gtk_misc_set_alignment (GTK_MISC (priv->folder_bar_label), 1.0, 0.5);
|
||||
gtk_widget_show (priv->folder_bar_label);
|
||||
|
||||
priv->button_label = gtk_label_new ("");
|
||||
priv->button_label = e_clipped_label_new ("");
|
||||
gtk_misc_set_padding (GTK_MISC (priv->button_label), 2, 0);
|
||||
gtk_misc_set_alignment (GTK_MISC (priv->button_label), 0.0, 0.5);
|
||||
gtk_widget_show (priv->button_label);
|
||||
@ -406,9 +406,17 @@ e_shell_folder_title_bar_construct (EShellFolderTitleBar *folder_title_bar)
|
||||
|
||||
priv->hbox = gtk_hbox_new (FALSE, 0);
|
||||
gtk_container_set_border_width (GTK_CONTAINER (priv->hbox), 2);
|
||||
gtk_box_pack_start (GTK_BOX (priv->hbox), priv->label, FALSE, TRUE, 0);
|
||||
gtk_box_pack_start (GTK_BOX (priv->hbox), priv->button, FALSE, TRUE, 0);
|
||||
gtk_box_pack_start (GTK_BOX (priv->hbox), priv->folder_bar_label, TRUE, TRUE, 0);
|
||||
gtk_box_pack_start (GTK_BOX (priv->hbox), priv->label, TRUE, TRUE, 0);
|
||||
gtk_box_pack_start (GTK_BOX (priv->hbox), priv->button, TRUE, TRUE, 0);
|
||||
gtk_box_pack_start (GTK_BOX (priv->hbox), priv->folder_bar_label, FALSE, TRUE, 0);
|
||||
|
||||
/* Make the label have a border as large as the button's.
|
||||
FIXME: This is really hackish. The hardcoded numbers should be OK
|
||||
as the padding is hardcoded in GtkButton too (see CHILD_SPACING in
|
||||
gtkbutton.c). */
|
||||
gtk_misc_set_padding (GTK_MISC (priv->label),
|
||||
GTK_WIDGET (priv->button)->style->klass->xthickness + 3,
|
||||
GTK_WIDGET (priv->button)->style->klass->ythickness + 1);
|
||||
|
||||
gtk_widget_show (priv->hbox);
|
||||
|
||||
@ -466,11 +474,11 @@ e_shell_folder_title_bar_set_title (EShellFolderTitleBar *folder_title_bar,
|
||||
priv = folder_title_bar->priv;
|
||||
|
||||
if (title == NULL) {
|
||||
gtk_label_set_text (GTK_LABEL (priv->button_label), _("(Untitled)"));
|
||||
gtk_label_set_text (GTK_LABEL (priv->label), _("(Untitled)"));
|
||||
e_clipped_label_set_text (E_CLIPPED_LABEL (priv->button_label), _("(Untitled)"));
|
||||
e_clipped_label_set_text (E_CLIPPED_LABEL (priv->label), _("(Untitled)"));
|
||||
} else {
|
||||
gtk_label_set_text (GTK_LABEL (priv->button_label), title);
|
||||
gtk_label_set_text (GTK_LABEL (priv->label), title);
|
||||
e_clipped_label_set_text (E_CLIPPED_LABEL (priv->button_label), title);
|
||||
e_clipped_label_set_text (E_CLIPPED_LABEL (priv->label), title);
|
||||
}
|
||||
|
||||
/* FIXME: There seems to be a bug in EClippedLabel, this is just a workaround. */
|
||||
@ -497,9 +505,9 @@ e_shell_folder_title_bar_set_folder_bar_label (EShellFolderTitleBar *folder_titl
|
||||
priv = folder_title_bar->priv;
|
||||
|
||||
if (text == NULL)
|
||||
gtk_label_set_text (GTK_LABEL (priv->folder_bar_label), "");
|
||||
e_clipped_label_set_text (E_CLIPPED_LABEL (priv->folder_bar_label), "");
|
||||
else
|
||||
gtk_label_set_text (GTK_LABEL (priv->folder_bar_label), text);
|
||||
e_clipped_label_set_text (E_CLIPPED_LABEL (priv->folder_bar_label), text);
|
||||
|
||||
/* FIXME: Might want to set the styles somewhere in here too,
|
||||
black text on grey background isn't the best combination */
|
||||
|
||||
108
shell/e-shell.c
108
shell/e-shell.c
@ -32,6 +32,10 @@
|
||||
#include <libgnome/gnome-i18n.h>
|
||||
#include <libgnome/gnome-util.h>
|
||||
|
||||
/* (For the displayName stuff.) */
|
||||
#include <gdk/gdkprivate.h>
|
||||
#include <X11/Xlib.h>
|
||||
|
||||
#include <bonobo/bonobo-exception.h>
|
||||
#include <bonobo/bonobo-moniker-util.h>
|
||||
|
||||
@ -42,6 +46,7 @@
|
||||
|
||||
#include "e-activity-handler.h"
|
||||
#include "e-component-registry.h"
|
||||
#include "e-corba-shortcuts.h"
|
||||
#include "e-corba-storage-registry.h"
|
||||
#include "e-folder-type-registry.h"
|
||||
#include "e-local-storage.h"
|
||||
@ -83,11 +88,15 @@ struct _EShellPrivate {
|
||||
|
||||
EComponentRegistry *component_registry;
|
||||
|
||||
/* ::StorageRegistry interface handler. */
|
||||
ECorbaStorageRegistry *corba_storage_registry; /* <aggregate> */
|
||||
|
||||
/* ::Activity interface handler. */
|
||||
EActivityHandler *activity_handler; /* <aggregate> */
|
||||
|
||||
/* ::Shortcuts interface handler. */
|
||||
ECorbaShortcuts *corba_shortcuts; /* <aggregate> */
|
||||
|
||||
/* This object handles going off-line. If the pointer is not NULL, it
|
||||
means we have a going-off-line process in progress. */
|
||||
EShellOfflineHandler *offline_handler;
|
||||
@ -119,14 +128,6 @@ enum {
|
||||
|
||||
static guint signals[LAST_SIGNAL] = { 0 };
|
||||
|
||||
Bonobo_ConfigDatabase
|
||||
e_shell_get_config_db (EShell *shell)
|
||||
{
|
||||
g_return_val_if_fail (shell != NULL, CORBA_OBJECT_NIL);
|
||||
|
||||
return shell->priv->db;
|
||||
}
|
||||
|
||||
|
||||
/* Callback for the folder selection dialog. */
|
||||
|
||||
@ -187,6 +188,23 @@ folder_selection_dialog_folder_selected_cb (EShellFolderSelectionDialog *folder_
|
||||
|
||||
/* CORBA interface implementation. */
|
||||
|
||||
static CORBA_char *
|
||||
impl_Shell__get_displayName (PortableServer_Servant servant,
|
||||
CORBA_Environment *ev)
|
||||
{
|
||||
char *display_string;
|
||||
CORBA_char *retval;
|
||||
|
||||
display_string = DisplayString (gdk_display);
|
||||
if (display_string == NULL)
|
||||
return CORBA_string_dup ("");
|
||||
|
||||
retval = CORBA_string_dup (display_string);
|
||||
XFree (display_string);
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
static GNOME_Evolution_ShellComponent
|
||||
impl_Shell_getComponentByType (PortableServer_Servant servant,
|
||||
const CORBA_char *type,
|
||||
@ -405,11 +423,29 @@ setup_activity_interface (EShell *shell)
|
||||
|
||||
activity_handler = e_activity_handler_new ();
|
||||
|
||||
bonobo_object_add_interface (BONOBO_OBJECT (shell),
|
||||
BONOBO_OBJECT (activity_handler));
|
||||
bonobo_object_add_interface (BONOBO_OBJECT (shell), BONOBO_OBJECT (activity_handler));
|
||||
priv->activity_handler = activity_handler;
|
||||
}
|
||||
|
||||
|
||||
/* Set up the ::Shortcuts interface. */
|
||||
|
||||
static void
|
||||
setup_shortcuts_interface (EShell *shell)
|
||||
{
|
||||
ECorbaShortcuts *corba_shortcuts;
|
||||
EShellPrivate *priv;
|
||||
|
||||
priv = shell->priv;
|
||||
|
||||
g_assert (priv->shortcuts != NULL);
|
||||
|
||||
corba_shortcuts = e_corba_shortcuts_new (priv->shortcuts);
|
||||
|
||||
bonobo_object_add_interface (BONOBO_OBJECT (shell), BONOBO_OBJECT (corba_shortcuts));
|
||||
priv->corba_shortcuts = corba_shortcuts;
|
||||
}
|
||||
|
||||
|
||||
/* Initialization of the storages. */
|
||||
|
||||
@ -694,6 +730,7 @@ destroy (GtkObject *object)
|
||||
/* No unreffing for these as they are aggregate. */
|
||||
/* bonobo_object_unref (BONOBO_OBJECT (priv->corba_storage_registry)); */
|
||||
/* bonobo_object_unref (BONOBO_OBJECT (priv->activity_handler)); */
|
||||
/* bonobo_object_unref (BONOBO_OBJECT (priv->corba_shortcuts)); */
|
||||
|
||||
/* FIXME. Maybe we should do something special here. */
|
||||
if (priv->offline_handler != NULL)
|
||||
@ -740,6 +777,7 @@ class_init (EShellClass *klass)
|
||||
gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL);
|
||||
|
||||
epv = & klass->epv;
|
||||
epv->_get_displayName = impl_Shell__get_displayName;
|
||||
epv->getComponentByType = impl_Shell_getComponentByType;
|
||||
epv->createNewView = impl_Shell_createNewView;
|
||||
epv->handleURI = impl_Shell_handleURI;
|
||||
@ -768,6 +806,7 @@ init (EShell *shell)
|
||||
priv->uri_schema_registry = NULL;
|
||||
priv->corba_storage_registry = NULL;
|
||||
priv->activity_handler = NULL;
|
||||
priv->corba_shortcuts = NULL;
|
||||
priv->offline_handler = NULL;
|
||||
priv->crash_type_names = NULL;
|
||||
priv->line_status = E_SHELL_LINE_STATUS_ONLINE;
|
||||
@ -843,7 +882,7 @@ e_shell_construct (EShell *shell,
|
||||
corba_object = bonobo_object_corba_objref (BONOBO_OBJECT (shell));
|
||||
if (oaf_active_server_register (iid, corba_object) != OAF_REG_SUCCESS) {
|
||||
CORBA_exception_free (&ev);
|
||||
return E_SHELL_CONSTRUCT_RESULT_GENERICERROR;
|
||||
return E_SHELL_CONSTRUCT_RESULT_CANNOTREGISTER;
|
||||
}
|
||||
|
||||
if (! show_splash) {
|
||||
@ -861,20 +900,7 @@ e_shell_construct (EShell *shell,
|
||||
else
|
||||
setup_components (shell, NULL);
|
||||
|
||||
/* The local storage depends on the component registry. */
|
||||
setup_local_storage (shell);
|
||||
|
||||
/* Set up the ::Activity interface. This must be done before we notify
|
||||
the components, as they might want to use it. */
|
||||
setup_activity_interface (shell);
|
||||
|
||||
/* Now that we have a local storage and an ::Activity interface, we can
|
||||
tell the components we are here. */
|
||||
set_owner_on_components (shell);
|
||||
|
||||
/* Run the intelligent importers to find see if any data needs
|
||||
importing. */
|
||||
intelligent_importer_init ();
|
||||
/* Set up the shortcuts. */
|
||||
|
||||
shortcut_path = g_concat_dir_and_file (local_directory, "shortcuts.xml");
|
||||
priv->shortcuts = e_shortcuts_new (priv->storage_set,
|
||||
@ -887,6 +913,26 @@ e_shell_construct (EShell *shell,
|
||||
|
||||
g_free (shortcut_path);
|
||||
|
||||
/* The local storage depends on the component registry. */
|
||||
setup_local_storage (shell);
|
||||
|
||||
/* Set up the ::Activity interface. This must be done before we notify
|
||||
the components, as they might want to use it. */
|
||||
setup_activity_interface (shell);
|
||||
|
||||
/* Set up the shortcuts interface. This has to be done after the
|
||||
shortcuts are actually initialized. */
|
||||
|
||||
setup_shortcuts_interface (shell);
|
||||
|
||||
/* Now that we have a local storage and all the interfaces set up, we
|
||||
can tell the components we are here. */
|
||||
set_owner_on_components (shell);
|
||||
|
||||
/* Run the intelligent importers to find see if any data needs
|
||||
importing. */
|
||||
intelligent_importer_init ();
|
||||
|
||||
if (show_splash)
|
||||
gtk_widget_destroy (splash);
|
||||
|
||||
@ -1239,8 +1285,7 @@ e_shell_restore_from_settings (EShell *shell)
|
||||
|
||||
priv = shell->priv;
|
||||
|
||||
num_views = bonobo_config_get_long_with_default (priv->db,
|
||||
"/Shell/Views/NumberOfViews", 0, NULL);
|
||||
num_views = bonobo_config_get_long_with_default (priv->db, "/Shell/Views/NumberOfViews", 0, NULL);
|
||||
|
||||
if (num_views == 0)
|
||||
return FALSE;
|
||||
@ -1499,6 +1544,15 @@ e_shell_go_online (EShell *shell,
|
||||
gtk_signal_emit (GTK_OBJECT (shell), signals[LINE_STATUS_CHANGED], priv->line_status);
|
||||
}
|
||||
|
||||
|
||||
Bonobo_ConfigDatabase
|
||||
e_shell_get_config_db (EShell *shell)
|
||||
{
|
||||
g_return_val_if_fail (shell != NULL, CORBA_OBJECT_NIL);
|
||||
|
||||
return shell->priv->db;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
e_shell_unregister_all (EShell *shell)
|
||||
|
||||
@ -130,46 +130,20 @@ show_new_group_dialog (EShortcutsView *view)
|
||||
GtkWidget *label;
|
||||
GtkWidget *entry;
|
||||
GtkWidget *box;
|
||||
const char *group_name;
|
||||
char *group_name;
|
||||
int button_num;
|
||||
|
||||
dialog = gnome_dialog_new (_("Create new shortcut group"),
|
||||
GNOME_STOCK_BUTTON_OK, GNOME_STOCK_BUTTON_CANCEL, NULL);
|
||||
group_name = e_request_string (GTK_WIDGET (gtk_widget_get_toplevel (GTK_WIDGET (view))),
|
||||
_("Create new shortcut group"),
|
||||
_("Group name:"),
|
||||
NULL);
|
||||
|
||||
label = gtk_label_new (_("Group name:"));
|
||||
gtk_widget_show (label);
|
||||
|
||||
entry = gtk_entry_new ();
|
||||
gtk_widget_show (entry);
|
||||
|
||||
box = gtk_hbox_new (FALSE, GNOME_PAD_SMALL);
|
||||
gtk_widget_show (box);
|
||||
|
||||
gtk_box_pack_start (GTK_BOX (box), label, FALSE, TRUE, 0);
|
||||
gtk_box_pack_start (GTK_BOX (box), entry, TRUE, TRUE, 0);
|
||||
|
||||
gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (dialog)->vbox), box, FALSE, TRUE, 0);
|
||||
|
||||
gnome_dialog_set_parent (GNOME_DIALOG (dialog), GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (view))));
|
||||
gnome_dialog_set_default (GNOME_DIALOG (dialog), 0);
|
||||
|
||||
gtk_widget_grab_focus (entry);
|
||||
gnome_dialog_editable_enters (GNOME_DIALOG (dialog), GTK_EDITABLE (entry));
|
||||
|
||||
gtk_widget_show (dialog);
|
||||
|
||||
button_num = gnome_dialog_run (GNOME_DIALOG (dialog));
|
||||
if (button_num == -1)
|
||||
if (group_name == NULL)
|
||||
return;
|
||||
if (button_num != 0) {
|
||||
gtk_widget_destroy (dialog);
|
||||
return;
|
||||
}
|
||||
|
||||
group_name = gtk_entry_get_text (GTK_ENTRY (entry));
|
||||
e_shortcuts_add_group (view->priv->shortcuts, -1, group_name);
|
||||
|
||||
gtk_widget_destroy (dialog);
|
||||
g_free (group_name);
|
||||
}
|
||||
|
||||
|
||||
@ -291,7 +265,7 @@ rename_group_cb (GtkWidget *widget,
|
||||
|
||||
old_name = e_shortcuts_get_group_title (shortcuts, menu_data->group_num);
|
||||
|
||||
new_name = e_request_string (GTK_WINDOW (gtk_widget_get_toplevel (widget)),
|
||||
new_name = e_request_string (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (shortcuts_view))),
|
||||
_("Rename Shortcut Group"),
|
||||
_("Rename selected shortcut group to:"),
|
||||
old_name);
|
||||
@ -452,7 +426,7 @@ rename_shortcut_cb (GtkWidget *widget,
|
||||
|
||||
shortcut_item = e_shortcuts_get_shortcut (shortcuts, menu_data->group_num, menu_data->item_num);
|
||||
|
||||
new_name = e_request_string (GTK_WINDOW (gtk_widget_get_toplevel (widget)),
|
||||
new_name = e_request_string (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (shortcuts_view))),
|
||||
_("Rename shortcut"),
|
||||
_("Rename selected shortcut to:"),
|
||||
shortcut_item->name);
|
||||
@ -460,7 +434,6 @@ rename_shortcut_cb (GtkWidget *widget,
|
||||
if (new_name == NULL)
|
||||
return;
|
||||
|
||||
|
||||
e_shortcuts_update_shortcut (shortcuts, menu_data->group_num, menu_data->item_num,
|
||||
shortcut_item->uri, new_name, shortcut_item->unread_count, shortcut_item->type);
|
||||
g_free (new_name);
|
||||
|
||||
@ -908,6 +908,7 @@ tree_drag_begin (ETree *etree,
|
||||
storage_set_view = E_STORAGE_SET_VIEW (etree);
|
||||
priv = storage_set_view->priv;
|
||||
|
||||
g_print ("%s -- %d\n", __FUNCTION__, row);
|
||||
priv->selected_row_path = e_tree_memory_node_get_data (E_TREE_MEMORY(priv->etree_model), path);
|
||||
|
||||
g_assert (priv->drag_corba_source_interface == CORBA_OBJECT_NIL);
|
||||
@ -1129,6 +1130,9 @@ tree_drag_motion (ETree *tree,
|
||||
storage_set_view = E_STORAGE_SET_VIEW (tree);
|
||||
priv = storage_set_view->priv;
|
||||
|
||||
g_print ("%s -- row %d x %d y %d\n", __FUNCTION__, row, x, y);
|
||||
path = e_tree_node_at_row (E_TREE (storage_set_view), row);
|
||||
|
||||
component_client = get_component_at_node (storage_set_view, path);
|
||||
if (component_client == NULL)
|
||||
return FALSE;
|
||||
@ -1137,8 +1141,6 @@ tree_drag_motion (ETree *tree,
|
||||
if (dnd_type == NULL)
|
||||
return FALSE;
|
||||
|
||||
g_print ("drag_motion %s\n", dnd_type);
|
||||
|
||||
if (strcmp (dnd_type, EVOLUTION_PATH_TARGET_TYPE) == 0)
|
||||
return handle_evolution_path_drag_motion (storage_set_view, path, context, time);
|
||||
|
||||
@ -1154,6 +1156,8 @@ tree_drag_motion (ETree *tree,
|
||||
|
||||
folder = get_folder_at_node (storage_set_view, path);
|
||||
|
||||
g_print ("drag_motion %s -- %s\n", dnd_type, e_folder_get_name (folder));
|
||||
|
||||
can_handle = GNOME_Evolution_ShellComponentDnd_DestinationFolder_handleMotion (destination_folder_interface,
|
||||
e_folder_get_physical_uri (folder),
|
||||
&corba_context,
|
||||
|
||||
@ -36,6 +36,7 @@
|
||||
|
||||
struct _EvolutionShellClientPrivate {
|
||||
GNOME_Evolution_Activity activity_interface;
|
||||
GNOME_Evolution_Shortcuts shortcuts_interface;
|
||||
};
|
||||
|
||||
#define PARENT_TYPE bonobo_object_client_get_type ()
|
||||
@ -56,6 +57,38 @@ struct _FolderSelectionListenerServant {
|
||||
};
|
||||
typedef struct _FolderSelectionListenerServant FolderSelectionListenerServant;
|
||||
|
||||
|
||||
/* Helper functions. */
|
||||
|
||||
static CORBA_Object
|
||||
query_shell_interface (EvolutionShellClient *shell_client,
|
||||
const char *interface_name)
|
||||
{
|
||||
CORBA_Environment ev;
|
||||
CORBA_Object interface_object;
|
||||
EvolutionShellClientPrivate *priv;
|
||||
|
||||
priv = shell_client->priv;
|
||||
|
||||
CORBA_exception_init (&ev);
|
||||
|
||||
interface_object = Bonobo_Unknown_queryInterface (bonobo_object_corba_objref (BONOBO_OBJECT (shell_client)),
|
||||
interface_name, &ev);
|
||||
|
||||
if (ev._major != CORBA_NO_EXCEPTION) {
|
||||
g_warning ("EvolutionShellClient: Error querying interface %s on %p -- %s",
|
||||
interface_name, shell_client, ev._repo_id);
|
||||
interface_object = CORBA_OBJECT_NIL;
|
||||
} else if (CORBA_Object_is_nil (interface_object, &ev)) {
|
||||
g_warning ("No interface %s for ShellClient %p", interface_name, shell_client);
|
||||
}
|
||||
|
||||
CORBA_exception_free (&ev);
|
||||
|
||||
return interface_object;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
impl_FolderSelectionListener_selected (PortableServer_Servant servant,
|
||||
const CORBA_char *uri,
|
||||
@ -238,6 +271,15 @@ destroy (GtkObject *object)
|
||||
CORBA_Object_release (priv->activity_interface, &ev);
|
||||
}
|
||||
|
||||
if (priv->shortcuts_interface != CORBA_OBJECT_NIL) {
|
||||
Bonobo_Unknown_unref (priv->shortcuts_interface, &ev);
|
||||
if (ev._major != CORBA_NO_EXCEPTION)
|
||||
g_warning ("EvolutionShellClient::destroy: "
|
||||
"Error unreffing the ::Shortcuts interface -- %s\n",
|
||||
ev._repo_id);
|
||||
CORBA_Object_release (priv->shortcuts_interface, &ev);
|
||||
}
|
||||
|
||||
CORBA_exception_free (&ev);
|
||||
|
||||
g_free (priv);
|
||||
@ -264,7 +306,8 @@ init (EvolutionShellClient *shell_client)
|
||||
EvolutionShellClientPrivate *priv;
|
||||
|
||||
priv = g_new (EvolutionShellClientPrivate, 1);
|
||||
priv->activity_interface = CORBA_OBJECT_NIL;
|
||||
priv->activity_interface = CORBA_OBJECT_NIL;
|
||||
priv->shortcuts_interface = CORBA_OBJECT_NIL;
|
||||
|
||||
shell_client->priv = priv;
|
||||
}
|
||||
@ -281,7 +324,6 @@ void
|
||||
evolution_shell_client_construct (EvolutionShellClient *shell_client,
|
||||
GNOME_Evolution_Shell corba_shell)
|
||||
{
|
||||
CORBA_Environment ev;
|
||||
EvolutionShellClientPrivate *priv;
|
||||
|
||||
g_return_if_fail (shell_client != NULL);
|
||||
@ -290,22 +332,11 @@ evolution_shell_client_construct (EvolutionShellClient *shell_client,
|
||||
|
||||
bonobo_object_construct (BONOBO_OBJECT (shell_client), (CORBA_Object) corba_shell);
|
||||
|
||||
CORBA_exception_init (&ev);
|
||||
|
||||
priv = shell_client->priv;
|
||||
g_return_if_fail (priv->activity_interface == CORBA_OBJECT_NIL);
|
||||
|
||||
priv->activity_interface = Bonobo_Unknown_queryInterface (bonobo_object_corba_objref (BONOBO_OBJECT (shell_client)),
|
||||
"IDL:GNOME/Evolution/Activity:1.0",
|
||||
&ev);
|
||||
if (ev._major != CORBA_NO_EXCEPTION) {
|
||||
g_warning ("EvolutionShellClient: Error querying interface ::Activity -- %s", ev._repo_id);
|
||||
priv->activity_interface = CORBA_OBJECT_NIL;
|
||||
} else if (CORBA_Object_is_nil (priv->activity_interface, &ev)) {
|
||||
g_warning ("No ::Activity interface for ShellClient %p", shell_client);
|
||||
}
|
||||
|
||||
CORBA_exception_free (&ev);
|
||||
priv->activity_interface = query_shell_interface (shell_client, "IDL:GNOME/Evolution/Activity:1.0");
|
||||
priv->shortcuts_interface = query_shell_interface (shell_client, "IDL:GNOME/Evolution/Shortcuts:1.0");
|
||||
}
|
||||
|
||||
/**
|
||||
@ -384,6 +415,25 @@ evolution_shell_client_get_activity_interface (EvolutionShellClient *shell_clien
|
||||
return shell_client->priv->activity_interface;
|
||||
}
|
||||
|
||||
/**
|
||||
* evolution_shell_client_get_activity_interface:
|
||||
* @shell_client: An EvolutionShellClient object
|
||||
*
|
||||
* Get the GNOME::Evolution::Shortcuts for the shell associated to
|
||||
* @shell_client.
|
||||
*
|
||||
* Return value: A CORBA Object represeting the GNOME::Evolution::Shortcuts
|
||||
* interface.
|
||||
**/
|
||||
GNOME_Evolution_Shortcuts
|
||||
evolution_shell_client_get_shortcuts_interface (EvolutionShellClient *shell_client)
|
||||
{
|
||||
g_return_val_if_fail (shell_client != NULL, CORBA_OBJECT_NIL);
|
||||
g_return_val_if_fail (EVOLUTION_IS_SHELL_CLIENT (shell_client), CORBA_OBJECT_NIL);
|
||||
|
||||
return shell_client->priv->shortcuts_interface;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* evolution_shell_client_get_local_storage:
|
||||
|
||||
@ -67,7 +67,8 @@ void evolution_shell_client_user_select_folder (EvolutionShe
|
||||
char **uri_return,
|
||||
char **physical_uri_return);
|
||||
|
||||
GNOME_Evolution_Activity evolution_shell_client_get_activity_interface (EvolutionShellClient *shell_client);
|
||||
GNOME_Evolution_Activity evolution_shell_client_get_activity_interface (EvolutionShellClient *shell_client);
|
||||
GNOME_Evolution_Shortcuts evolution_shell_client_get_shortcuts_interface (EvolutionShellClient *shell_client);
|
||||
|
||||
GNOME_Evolution_Storage evolution_shell_client_get_local_storage (EvolutionShellClient *shell_client);
|
||||
|
||||
|
||||
@ -682,4 +682,4 @@ evolution_shell_component_get_owner (EvolutionShellComponent *shell_component)
|
||||
E_MAKE_X_TYPE (evolution_shell_component, "EvolutionShellComponent", EvolutionShellComponent,
|
||||
class_init, init, PARENT_TYPE,
|
||||
POA_GNOME_Evolution_ShellComponent__init,
|
||||
GTK_STRUCT_OFFSET (EvolutionShellComponentClass, epv));
|
||||
GTK_STRUCT_OFFSET (EvolutionShellComponentClass, epv))
|
||||
|
||||
@ -40,7 +40,7 @@
|
||||
#define COMPONENT_ID "OAFIID:GNOME_Evolution_TestComponent_ShellComponent"
|
||||
|
||||
static const EvolutionShellComponentFolderType folder_types[] = {
|
||||
{ "test", "/usr/share/pixmaps/gnome-money.png", NULL, NULL },
|
||||
{ "test", "/usr/share/pixmaps/gnome-money.png", FALSE, NULL, NULL },
|
||||
{ NULL }
|
||||
};
|
||||
|
||||
@ -51,6 +51,60 @@ static EvolutionActivityClient *activity_client;
|
||||
static int timeout_id = 0;
|
||||
static int progress = -1;
|
||||
|
||||
|
||||
/* Test the ::Shortcut interface. */
|
||||
|
||||
static void
|
||||
spit_out_shortcuts (EvolutionShellClient *shell_client)
|
||||
{
|
||||
GNOME_Evolution_Shortcuts shortcuts_interface;
|
||||
GNOME_Evolution_Shortcuts_GroupList *groups;
|
||||
CORBA_Environment ev;
|
||||
int i, j;
|
||||
|
||||
g_print ("** Getting shortcuts from the shell:\n");
|
||||
|
||||
CORBA_exception_init (&ev);
|
||||
|
||||
shortcuts_interface = evolution_shell_client_get_shortcuts_interface (shell_client);
|
||||
if (CORBA_Object_is_nil (shortcuts_interface, &ev)) {
|
||||
g_warning ("No ::Shortcut interface on the shell");
|
||||
CORBA_exception_free (&ev);
|
||||
return;
|
||||
}
|
||||
|
||||
groups = GNOME_Evolution_Shortcuts__get_groups (shortcuts_interface, &ev);
|
||||
if (ev._major != CORBA_NO_EXCEPTION) {
|
||||
g_warning ("Exception getting the groups: %s", ev._repo_id);
|
||||
CORBA_exception_free (&ev);
|
||||
return;
|
||||
}
|
||||
|
||||
for (i = 0; i < groups->_length; i ++) {
|
||||
GNOME_Evolution_Shortcuts_Group *group;
|
||||
GNOME_Evolution_Shortcuts_ShortcutList *shortcuts;
|
||||
|
||||
group = groups->_buffer + i;
|
||||
shortcuts = &group->shortcuts;
|
||||
|
||||
g_print ("\tGROUP: %s\n", group->name);
|
||||
|
||||
for (j = 0; j < shortcuts->_length; j ++) {
|
||||
GNOME_Evolution_Shortcuts_Shortcut *shortcut;
|
||||
|
||||
shortcut = shortcuts->_buffer + j;
|
||||
|
||||
g_print ("\t\tName: %s\n", shortcut->name);
|
||||
g_print ("\t\t\tType: %s\n", shortcut->type);
|
||||
g_print ("\t\t\tURI: %s\n", shortcut->uri);
|
||||
}
|
||||
}
|
||||
|
||||
g_print ("** Done\n\n");
|
||||
|
||||
CORBA_exception_free (&ev);
|
||||
}
|
||||
|
||||
|
||||
/* Callbacks. */
|
||||
|
||||
@ -196,6 +250,8 @@ owner_set_callback (EvolutionShellComponent *shell_component,
|
||||
|
||||
if (evolution_shell_client_get_activity_interface (parent_shell) == CORBA_OBJECT_NIL)
|
||||
g_warning ("Shell doesn't have a ::Activity interface -- weird!");
|
||||
|
||||
spit_out_shortcuts (shell_client);
|
||||
}
|
||||
|
||||
static int
|
||||
|
||||
Reference in New Issue
Block a user