170 lines
4.7 KiB
C
170 lines
4.7 KiB
C
|
/* ide-greeter-section.c
|
||
|
*
|
||
|
* Copyright 2017-2019 Christian Hergert <chergert@redhat.com>
|
||
|
*
|
||
|
* 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 3 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, see <http://www.gnu.org/licenses/>.
|
||
|
*
|
||
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||
|
*/
|
||
|
|
||
|
#define G_LOG_DOMAIN "ide-greeter-section"
|
||
|
|
||
|
#include "config.h"
|
||
|
|
||
|
#include "ide-greeter-section.h"
|
||
|
|
||
|
G_DEFINE_INTERFACE (IdeGreeterSection, ide_greeter_section, GTK_TYPE_WIDGET)
|
||
|
|
||
|
enum {
|
||
|
PROJECT_ACTIVATED,
|
||
|
N_SIGNALS
|
||
|
};
|
||
|
|
||
|
static guint signals [N_SIGNALS];
|
||
|
|
||
|
static void
|
||
|
ide_greeter_section_default_init (IdeGreeterSectionInterface *iface)
|
||
|
{
|
||
|
/**
|
||
|
* IdeGreeterSection::project-activated:
|
||
|
* @self: an #IdeGreeterSection
|
||
|
* @project_info: an #IdeProjectInfo
|
||
|
*
|
||
|
* The "project-activated" signal is emitted when a project has been
|
||
|
* selected by the user in the section.
|
||
|
*
|
||
|
* Use ide_greeter_section_emit_project_activated() to activate
|
||
|
* this signal.
|
||
|
*
|
||
|
* Since: 3.32
|
||
|
*/
|
||
|
signals [PROJECT_ACTIVATED] =
|
||
|
g_signal_new ("project-activated",
|
||
|
G_TYPE_FROM_INTERFACE (iface),
|
||
|
G_SIGNAL_RUN_LAST,
|
||
|
G_STRUCT_OFFSET (IdeGreeterSectionInterface, project_activated),
|
||
|
NULL, NULL, NULL,
|
||
|
G_TYPE_NONE, 1, IDE_TYPE_PROJECT_INFO);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* ide_greeter_section_get_priority:
|
||
|
* @self: an #IdeGreeterSection
|
||
|
*
|
||
|
* Get the priority of the section. The lowest integral value is
|
||
|
* sorted first in the list of sections.
|
||
|
*
|
||
|
* Returns: the priority for the section
|
||
|
*
|
||
|
* Since: 3.32
|
||
|
*/
|
||
|
gint
|
||
|
ide_greeter_section_get_priority (IdeGreeterSection *self)
|
||
|
{
|
||
|
g_return_val_if_fail (IDE_IS_GREETER_SECTION (self), 0);
|
||
|
|
||
|
if (IDE_GREETER_SECTION_GET_IFACE (self)->get_priority)
|
||
|
return IDE_GREETER_SECTION_GET_IFACE (self)->get_priority (self);
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* ide_greeter_section_filter:
|
||
|
* @self: a #IdeGreeterSection
|
||
|
* @spec: (nullable): a #DzlPatternSpec or %NULL
|
||
|
*
|
||
|
* Refilter the visibile items based on the current search.
|
||
|
*
|
||
|
* Returns: %TRUE if at least one element matched.
|
||
|
*
|
||
|
* Since: 3.32
|
||
|
*/
|
||
|
gboolean
|
||
|
ide_greeter_section_filter (IdeGreeterSection *self,
|
||
|
DzlPatternSpec *spec)
|
||
|
{
|
||
|
g_return_val_if_fail (IDE_IS_GREETER_SECTION (self), FALSE);
|
||
|
|
||
|
if (IDE_GREETER_SECTION_GET_IFACE (self)->filter)
|
||
|
return IDE_GREETER_SECTION_GET_IFACE (self)->filter (self, spec);
|
||
|
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
void
|
||
|
ide_greeter_section_emit_project_activated (IdeGreeterSection *self,
|
||
|
IdeProjectInfo *project_info)
|
||
|
{
|
||
|
g_return_if_fail (IDE_IS_GREETER_SECTION (self));
|
||
|
g_return_if_fail (IDE_IS_PROJECT_INFO (project_info));
|
||
|
|
||
|
g_signal_emit (self, signals [PROJECT_ACTIVATED], 0, project_info);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* ide_greeter_section_activate_first:
|
||
|
* @self: a #IdeGreeterSection
|
||
|
*
|
||
|
* Active the first item in the section. This happens when the user
|
||
|
* hits Enter within the search box to select the first visible item
|
||
|
* in the search result set.
|
||
|
*
|
||
|
* Ensure the given item is visible before activating it.
|
||
|
*
|
||
|
* If no item matched, then return %FALSE.
|
||
|
*
|
||
|
* Returns: %TRUE if an item was activated
|
||
|
*
|
||
|
* Since: 3.32
|
||
|
*/
|
||
|
gboolean
|
||
|
ide_greeter_section_activate_first (IdeGreeterSection *self)
|
||
|
{
|
||
|
g_return_val_if_fail (IDE_IS_GREETER_SECTION (self), FALSE);
|
||
|
|
||
|
if (IDE_GREETER_SECTION_GET_IFACE (self)->activate_first)
|
||
|
return IDE_GREETER_SECTION_GET_IFACE (self)->activate_first (self);
|
||
|
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
void
|
||
|
ide_greeter_section_set_selection_mode (IdeGreeterSection *self,
|
||
|
gboolean selection_mode)
|
||
|
{
|
||
|
g_return_if_fail (IDE_IS_GREETER_SECTION (self));
|
||
|
|
||
|
if (IDE_GREETER_SECTION_GET_IFACE (self)->set_selection_mode)
|
||
|
IDE_GREETER_SECTION_GET_IFACE (self)->set_selection_mode (self, selection_mode);
|
||
|
}
|
||
|
|
||
|
void
|
||
|
ide_greeter_section_delete_selected (IdeGreeterSection *self)
|
||
|
{
|
||
|
g_assert (IDE_IS_GREETER_SECTION (self));
|
||
|
|
||
|
if (IDE_GREETER_SECTION_GET_IFACE (self)->delete_selected)
|
||
|
IDE_GREETER_SECTION_GET_IFACE (self)->delete_selected (self);
|
||
|
}
|
||
|
|
||
|
void
|
||
|
ide_greeter_section_purge_selected (IdeGreeterSection *self)
|
||
|
{
|
||
|
g_assert (IDE_IS_GREETER_SECTION (self));
|
||
|
|
||
|
if (IDE_GREETER_SECTION_GET_IFACE (self)->purge_selected)
|
||
|
IDE_GREETER_SECTION_GET_IFACE (self)->purge_selected (self);
|
||
|
}
|