pidgin/pidgin
Clone
Summary
Browse
Changes
Graph
Make PurpleHistoryManager a final type
2021-10-20, Gary Kramlich
e19c9f9c79fc
Make PurpleHistoryManager a final type
Testing Done:
Ran the unit tests and sent a message and made sure it ended up in the database.
Reviewed at https://reviews.imfreedom.org/r/1083/
/*
* finch
*
* Finch is the legal property of its developers, whose names are too numerous
* to list here. Please refer to the COPYRIGHT file distributed with this
* source distribution.
*
* 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., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
*/
#include
<glib.h>
#include
<purple.h>
#include
<gnt.h>
#include
"gntmenuutil.h"
static
void
context_menu_callback
(
GntMenuItem
*
item
,
gpointer
data
)
{
PurpleActionMenu
*
action
=
data
;
if
(
action
)
{
void
(
*
callback
)(
gpointer
,
gpointer
);
callback
=
(
void
(
*
)(
gpointer
,
gpointer
))
purple_action_menu_get_callback
(
action
);
if
(
callback
)
{
gpointer
ctx
=
g_object_get_data
(
G_OBJECT
(
item
),
"menuctx"
);
callback
(
ctx
,
purple_action_menu_get_data
(
action
));
}
}
}
void
finch_append_menu_action
(
GntMenu
*
menu
,
PurpleActionMenu
*
action
,
gpointer
ctx
)
{
GList
*
list
;
GntMenuItem
*
item
;
const
gchar
*
label
;
gchar
*
clean_label
=
NULL
;
if
(
action
==
NULL
)
return
;
label
=
purple_action_menu_get_label
(
action
);
if
(
strchr
(
label
,
'_'
)
!=
NULL
)
{
clean_label
=
g_strdup
(
label
);
purple_str_strip_char
(
clean_label
,
'_'
);
label
=
clean_label
;
}
item
=
gnt_menuitem_new
(
label
);
g_free
(
clean_label
);
if
(
purple_action_menu_get_callback
(
action
))
{
gnt_menuitem_set_callback
(
item
,
context_menu_callback
,
action
);
g_object_set_data
(
G_OBJECT
(
item
),
"menuctx"
,
ctx
);
}
gnt_menu_add_item
(
menu
,
item
);
list
=
purple_action_menu_get_children
(
action
);
if
(
list
)
{
GntWidget
*
sub
=
gnt_menu_new
(
GNT_MENU_POPUP
);
gnt_menuitem_set_submenu
(
item
,
GNT_MENU
(
sub
));
for
(;
list
;
list
=
g_list_delete_link
(
list
,
list
))
finch_append_menu_action
(
GNT_MENU
(
sub
),
list
->
data
,
action
);
purple_action_menu_set_children
(
action
,
NULL
);
}
g_signal_connect_swapped
(
G_OBJECT
(
menu
),
"destroy"
,
G_CALLBACK
(
purple_action_menu_free
),
action
);
}