403 | 403 |
}
|
404 | 404 |
|
405 | 405 |
static AmtkActionInfo *
|
406 | |
common_create (AmtkFactory *factory,
|
407 | |
const gchar *action_name,
|
408 | |
AmtkFactoryFlags flags,
|
409 | |
GtkWidget **widget)
|
|
406 |
common_create (AmtkFactory *factory,
|
|
407 |
const gchar *action_name,
|
|
408 |
AmtkFactoryFlags flags)
|
410 | 409 |
{
|
411 | 410 |
AmtkActionInfoCentralStore *central_store;
|
412 | 411 |
AmtkActionInfo *action_info;
|
|
418 | 417 |
{
|
419 | 418 |
g_warning ("AmtkFactory create function: action name '%s' not found.",
|
420 | 419 |
action_name);
|
421 | |
|
|
420 |
return NULL;
|
|
421 |
}
|
|
422 |
|
|
423 |
if ((flags & AMTK_FACTORY_IGNORE_ACCELS) == 0 &&
|
|
424 |
(flags & AMTK_FACTORY_IGNORE_ACCELS_FOR_APP) == 0 &&
|
|
425 |
factory->priv->app != NULL)
|
|
426 |
{
|
|
427 |
const gchar * const *accels;
|
|
428 |
|
|
429 |
accels = amtk_action_info_get_accels (action_info);
|
|
430 |
gtk_application_set_accels_for_action (factory->priv->app, action_name, accels);
|
|
431 |
}
|
|
432 |
|
|
433 |
amtk_action_info_mark_as_used (action_info);
|
|
434 |
|
|
435 |
return action_info;
|
|
436 |
}
|
|
437 |
|
|
438 |
static AmtkActionInfo *
|
|
439 |
common_create_widget (AmtkFactory *factory,
|
|
440 |
const gchar *action_name,
|
|
441 |
AmtkFactoryFlags flags,
|
|
442 |
GtkWidget **widget)
|
|
443 |
{
|
|
444 |
AmtkActionInfo *action_info;
|
|
445 |
|
|
446 |
action_info = common_create (factory, action_name, flags);
|
|
447 |
|
|
448 |
if (action_info == NULL)
|
|
449 |
{
|
422 | 450 |
g_object_ref_sink (*widget);
|
423 | 451 |
g_object_unref (*widget);
|
424 | 452 |
*widget = NULL;
|
|
429 | 457 |
{
|
430 | 458 |
gtk_actionable_set_action_name (GTK_ACTIONABLE (*widget), action_name);
|
431 | 459 |
}
|
432 | |
|
433 | |
if ((flags & AMTK_FACTORY_IGNORE_ACCELS) == 0 &&
|
434 | |
(flags & AMTK_FACTORY_IGNORE_ACCELS_FOR_APP) == 0 &&
|
435 | |
factory->priv->app != NULL)
|
436 | |
{
|
437 | |
const gchar * const *accels;
|
438 | |
|
439 | |
accels = amtk_action_info_get_accels (action_info);
|
440 | |
gtk_application_set_accels_for_action (factory->priv->app, action_name, accels);
|
441 | |
}
|
442 | |
|
443 | |
amtk_action_info_mark_as_used (action_info);
|
444 | 460 |
|
445 | 461 |
return action_info;
|
446 | 462 |
}
|
|
455 | 471 |
const gchar * const *accels;
|
456 | 472 |
const gchar *tooltip;
|
457 | 473 |
|
458 | |
action_info = common_create (factory, action_name, flags, (GtkWidget **)menu_item);
|
|
474 |
action_info = common_create_widget (factory, action_name, flags, (GtkWidget **)menu_item);
|
459 | 475 |
if (action_info == NULL)
|
460 | 476 |
{
|
461 | 477 |
return NULL;
|
|
509 | 525 |
const gchar *icon_name;
|
510 | 526 |
const gchar *tooltip;
|
511 | 527 |
|
512 | |
action_info = common_create (factory, action_name, flags, (GtkWidget **)tool_button);
|
|
528 |
action_info = common_create_widget (factory, action_name, flags, (GtkWidget **)tool_button);
|
513 | 529 |
if (action_info == NULL)
|
514 | 530 |
{
|
515 | 531 |
return NULL;
|
|
749 | 765 |
}
|
750 | 766 |
|
751 | 767 |
/**
|
|
768 |
* amtk_factory_create_gmenu_item:
|
|
769 |
* @factory: an #AmtkFactory.
|
|
770 |
* @action_name: an action name.
|
|
771 |
*
|
|
772 |
* Calls amtk_factory_create_gmenu_item_full() with the
|
|
773 |
* #AmtkFactory:default-flags.
|
|
774 |
*
|
|
775 |
* Returns: (transfer full): a new #GMenuItem for @action_name.
|
|
776 |
* Since: 5.0
|
|
777 |
*/
|
|
778 |
GMenuItem *
|
|
779 |
amtk_factory_create_gmenu_item (AmtkFactory *factory,
|
|
780 |
const gchar *action_name)
|
|
781 |
{
|
|
782 |
g_return_val_if_fail (AMTK_IS_FACTORY (factory), NULL);
|
|
783 |
g_return_val_if_fail (action_name != NULL, NULL);
|
|
784 |
|
|
785 |
return amtk_factory_create_gmenu_item_full (factory,
|
|
786 |
action_name,
|
|
787 |
factory->priv->default_flags);
|
|
788 |
}
|
|
789 |
|
|
790 |
/**
|
|
791 |
* amtk_factory_create_gmenu_item_full:
|
|
792 |
* @factory: an #AmtkFactory.
|
|
793 |
* @action_name: an action name.
|
|
794 |
* @flags: #AmtkFactoryFlags.
|
|
795 |
*
|
|
796 |
* This function ignores the #AmtkFactory:default-flags property and takes the
|
|
797 |
* @flags argument instead.
|
|
798 |
*
|
|
799 |
* Creates a new #GMenuItem for @action_name. It ignores the tooltip, i.e. the
|
|
800 |
* return value of amtk_action_info_get_tooltip().
|
|
801 |
*
|
|
802 |
* Returns: (transfer full): a new #GMenuItem for @action_name.
|
|
803 |
* Since: 5.0
|
|
804 |
*/
|
|
805 |
GMenuItem *
|
|
806 |
amtk_factory_create_gmenu_item_full (AmtkFactory *factory,
|
|
807 |
const gchar *action_name,
|
|
808 |
AmtkFactoryFlags flags)
|
|
809 |
{
|
|
810 |
AmtkActionInfo *action_info;
|
|
811 |
const gchar *label = NULL;
|
|
812 |
const gchar *detailed_action = NULL;
|
|
813 |
GMenuItem *menu_item;
|
|
814 |
const gchar *icon_name;
|
|
815 |
|
|
816 |
g_return_val_if_fail (AMTK_IS_FACTORY (factory), NULL);
|
|
817 |
g_return_val_if_fail (action_name != NULL, NULL);
|
|
818 |
|
|
819 |
action_info = common_create (factory, action_name, flags);
|
|
820 |
if (action_info == NULL)
|
|
821 |
{
|
|
822 |
return NULL;
|
|
823 |
}
|
|
824 |
|
|
825 |
if ((flags & AMTK_FACTORY_IGNORE_LABEL) == 0)
|
|
826 |
{
|
|
827 |
label = amtk_action_info_get_label (action_info);
|
|
828 |
}
|
|
829 |
|
|
830 |
if ((flags & AMTK_FACTORY_IGNORE_GACTION) == 0)
|
|
831 |
{
|
|
832 |
detailed_action = action_name;
|
|
833 |
}
|
|
834 |
|
|
835 |
menu_item = g_menu_item_new (label, detailed_action);
|
|
836 |
|
|
837 |
icon_name = amtk_action_info_get_icon_name (action_info);
|
|
838 |
if ((flags & AMTK_FACTORY_IGNORE_ICON) == 0 &&
|
|
839 |
icon_name != NULL)
|
|
840 |
{
|
|
841 |
GIcon *icon;
|
|
842 |
|
|
843 |
icon = g_themed_icon_new (icon_name);
|
|
844 |
g_menu_item_set_icon (menu_item, icon);
|
|
845 |
g_object_unref (icon);
|
|
846 |
}
|
|
847 |
|
|
848 |
return menu_item;
|
|
849 |
}
|
|
850 |
|
|
851 |
/**
|
752 | 852 |
* amtk_factory_create_tool_button:
|
753 | 853 |
* @factory: an #AmtkFactory.
|
754 | 854 |
* @action_name: an action name.
|