[ fixes bug #39763 ] verb callback for EditCopy (cut_cb): verb callback
2003-04-07 Chris Toshok <toshok@ximian.com> [ fixes bug #39763 ] * gui/component/select-names/e-select-names-bonobo.c (copy_cb): verb callback for EditCopy (cut_cb): verb callback for EditCut. (paste_cb): verb callback for EditPaste. (select_all_cb): verb callback for SelectAll. (free_closure): new function (merge_menu_items): same (unmerge_menu_items): same (control_set_frame_cb): same (control_activate_cb): same (widget_focus_cb): same (e_bonobo_control_automerge_ui): new function, sets up focus signals on the widget passed in to merge/unmerge the passed in ui/verbs. (impl_SelectNames_get_entry_for_section): call e_bonobo_control_automerge_ui for this entry. svn path=/trunk/; revision=20735
This commit is contained in:
committed by
Chris Toshok
parent
b40727e44b
commit
fc4ca8aadc
@ -1,3 +1,23 @@
|
||||
2003-04-07 Chris Toshok <toshok@ximian.com>
|
||||
|
||||
[ fixes bug #39763 ]
|
||||
* gui/component/select-names/e-select-names-bonobo.c (copy_cb):
|
||||
verb callback for EditCopy
|
||||
(cut_cb): verb callback for EditCut.
|
||||
(paste_cb): verb callback for EditPaste.
|
||||
(select_all_cb): verb callback for SelectAll.
|
||||
(free_closure): new function
|
||||
(merge_menu_items): same
|
||||
(unmerge_menu_items): same
|
||||
(control_set_frame_cb): same
|
||||
(control_activate_cb): same
|
||||
(widget_focus_cb): same
|
||||
(e_bonobo_control_automerge_ui): new function, sets up focus
|
||||
signals on the widget passed in to merge/unmerge the passed in
|
||||
ui/verbs.
|
||||
(impl_SelectNames_get_entry_for_section): call
|
||||
e_bonobo_control_automerge_ui for this entry.
|
||||
|
||||
2003-04-07 Chris Toshok <toshok@ximian.com>
|
||||
|
||||
* gui/component/e-address-popup.c (mini_wizard_new): change the
|
||||
|
||||
@ -33,9 +33,11 @@
|
||||
#include <bonobo/bonobo-control.h>
|
||||
#include <bonobo/bonobo-exception.h>
|
||||
#include <bonobo/bonobo-event-source.h>
|
||||
#include <bonobo/bonobo-ui-util.h>
|
||||
|
||||
#include <gal/util/e-util.h>
|
||||
#include <gal/e-text/e-entry.h>
|
||||
#include <gal/util/e-text-event-processor.h>
|
||||
|
||||
#include "evolution-shell-client.h"
|
||||
|
||||
@ -46,6 +48,7 @@
|
||||
#include "e-select-names-text-model.h"
|
||||
#include "e-select-names-completion.h"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
|
||||
#define PARENT_TYPE BONOBO_TYPE_OBJECT
|
||||
@ -302,6 +305,157 @@ manager_ok_cb (ESelectNamesManager *manager, gpointer closure)
|
||||
bonobo_arg_release (arg);
|
||||
}
|
||||
|
||||
static void
|
||||
copy_cb (BonoboUIComponent *ui, gpointer user_data, const char *command)
|
||||
{
|
||||
EEntry *entry = E_ENTRY (user_data);
|
||||
|
||||
e_text_copy_clipboard (entry->item);
|
||||
}
|
||||
|
||||
static void
|
||||
cut_cb (BonoboUIComponent *ui, gpointer user_data, const char *command)
|
||||
{
|
||||
EEntry *entry = E_ENTRY (user_data);
|
||||
|
||||
e_text_cut_clipboard (entry->item);
|
||||
}
|
||||
|
||||
static void
|
||||
paste_cb (BonoboUIComponent *ui, gpointer user_data, const char *command)
|
||||
{
|
||||
EEntry *entry = E_ENTRY (user_data);
|
||||
|
||||
e_text_paste_clipboard (entry->item);
|
||||
}
|
||||
|
||||
static void
|
||||
select_all_cb (BonoboUIComponent *ui, gpointer user_data, const char *command)
|
||||
{
|
||||
EEntry *entry = E_ENTRY (user_data);
|
||||
|
||||
e_text_select_all (entry->item);
|
||||
}
|
||||
|
||||
static BonoboUIVerb verbs [] = {
|
||||
BONOBO_UI_VERB ("EditCut", cut_cb),
|
||||
BONOBO_UI_VERB ("EditCopy", copy_cb),
|
||||
BONOBO_UI_VERB ("EditPaste", paste_cb),
|
||||
BONOBO_UI_VERB ("EditSelectAll", select_all_cb),
|
||||
BONOBO_UI_VERB_END
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
BonoboControl *control;
|
||||
Bonobo_UIContainer remote_ui_container;
|
||||
char *ui_xml_path;
|
||||
char *app_name;
|
||||
BonoboUIVerb *verbs;
|
||||
gpointer user_data;
|
||||
} ControlUIClosure;
|
||||
|
||||
static void
|
||||
free_closure (ControlUIClosure *closure,
|
||||
GtkObject *where_object_was)
|
||||
{
|
||||
bonobo_object_release_unref (closure->remote_ui_container, NULL);
|
||||
g_free (closure->ui_xml_path);
|
||||
g_free (closure->app_name);
|
||||
g_free (closure);
|
||||
}
|
||||
|
||||
static void
|
||||
merge_menu_items (BonoboControl *control, BonoboUIComponent *uic, ControlUIClosure *closure)
|
||||
{
|
||||
if (closure->remote_ui_container) {
|
||||
bonobo_ui_component_set_container (uic, closure->remote_ui_container, NULL);
|
||||
|
||||
bonobo_ui_component_add_verb_list_with_data (uic, closure->verbs, closure->user_data);
|
||||
|
||||
bonobo_ui_component_freeze (uic, NULL);
|
||||
|
||||
bonobo_ui_util_set_ui (uic, EVOLUTION_DATADIR,
|
||||
closure->ui_xml_path,
|
||||
closure->app_name, NULL);
|
||||
|
||||
bonobo_ui_component_thaw (uic, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
unmerge_menu_items (BonoboControl *control, BonoboUIComponent *uic, ControlUIClosure *closure)
|
||||
{
|
||||
bonobo_ui_component_unset_container (uic, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
control_set_frame_cb (BonoboControl *control,
|
||||
ControlUIClosure *closure)
|
||||
{
|
||||
Bonobo_ControlFrame frame = bonobo_control_get_control_frame (control,
|
||||
NULL);
|
||||
if (!frame)
|
||||
return;
|
||||
closure->remote_ui_container = bonobo_control_get_remote_ui_container (control, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
control_activate_cb (BonoboControl *control,
|
||||
gboolean activate,
|
||||
ControlUIClosure *closure)
|
||||
{
|
||||
BonoboUIComponent *uic;
|
||||
|
||||
uic = bonobo_control_get_ui_component (control);
|
||||
|
||||
if (activate) {
|
||||
merge_menu_items (control, uic, closure);
|
||||
} else {
|
||||
unmerge_menu_items (control, uic, closure);
|
||||
}
|
||||
}
|
||||
|
||||
static gboolean
|
||||
widget_focus_cb (GtkWidget *w, GdkEventFocus *focus, ControlUIClosure *closure)
|
||||
{
|
||||
control_activate_cb (closure->control, GTK_WIDGET_HAS_FOCUS (w), closure);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
e_bonobo_control_automerge_ui (GtkWidget *w,
|
||||
BonoboControl *control,
|
||||
const char *ui_xml_path,
|
||||
const char *app_name,
|
||||
BonoboUIVerb *verbs,
|
||||
gpointer data)
|
||||
{
|
||||
ControlUIClosure *closure;
|
||||
|
||||
g_return_if_fail (GTK_IS_WIDGET (w));
|
||||
g_return_if_fail (BONOBO_IS_CONTROL (control));
|
||||
g_return_if_fail (ui_xml_path != NULL);
|
||||
g_return_if_fail (app_name != NULL);
|
||||
g_return_if_fail (verbs != NULL);
|
||||
|
||||
closure = g_new (ControlUIClosure, 1);
|
||||
|
||||
closure->control = control;
|
||||
closure->ui_xml_path = g_strdup (ui_xml_path);
|
||||
closure->app_name = g_strdup (app_name);
|
||||
closure->verbs = verbs;
|
||||
closure->user_data = data;
|
||||
|
||||
g_signal_connect (w, "focus_in_event",
|
||||
G_CALLBACK (widget_focus_cb), closure);
|
||||
g_signal_connect (w, "focus_out_event",
|
||||
G_CALLBACK (widget_focus_cb), closure);
|
||||
g_signal_connect (control, "set_frame",
|
||||
G_CALLBACK (control_set_frame_cb), closure);
|
||||
|
||||
g_object_weak_ref (G_OBJECT (control), (GWeakNotify)free_closure, closure);
|
||||
}
|
||||
|
||||
static Bonobo_Control
|
||||
impl_SelectNames_get_entry_for_section (PortableServer_Servant servant,
|
||||
const CORBA_char *section_id,
|
||||
@ -354,6 +508,12 @@ impl_SelectNames_get_entry_for_section (PortableServer_Servant servant,
|
||||
|
||||
g_signal_connect (entry_widget, "changed", G_CALLBACK (entry_changed), control);
|
||||
|
||||
e_bonobo_control_automerge_ui (GTK_WIDGET (E_ENTRY (entry_widget)->canvas),
|
||||
control,
|
||||
EVOLUTION_UIDIR "/evolution-composer-entries.xml",
|
||||
"evolution-addressbook",
|
||||
verbs, entry_widget);
|
||||
|
||||
return CORBA_Object_duplicate (bonobo_object_corba_objref (BONOBO_OBJECT (control)), ev);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user