Blame src/dh-assistant.c

Packit 116408
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
Packit 116408
/*
Packit 116408
 * Copyright (C) 2008 Imendio AB
Packit 116408
 *
Packit 116408
 * This program is free software; you can redistribute it and/or
Packit 116408
 * modify it under the terms of the GNU General Public License as
Packit 116408
 * published by the Free Software Foundation; either version 2 of the
Packit 116408
 * License, or (at your option) any later version.
Packit 116408
 *
Packit 116408
 * This program is distributed in the hope that it will be useful,
Packit 116408
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 116408
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 116408
 * General Public License for more details.
Packit 116408
 *
Packit 116408
 * You should have received a copy of the GNU General Public License
Packit 116408
 * along with this program; if not, see <http://www.gnu.org/licenses/>.
Packit 116408
 */
Packit 116408
Packit 116408
#include "config.h"
Packit 116408
#include "dh-assistant.h"
Packit 116408
#include "dh-window.h"
Packit 116408
#include "dh-util.h"
Packit 116408
#include "dh-assistant-view.h"
Packit 116408
#include "dh-settings.h"
Packit 116408
Packit 116408
typedef struct {
Packit 116408
        GtkWidget *view;
Packit 116408
} DhAssistantPrivate;
Packit 116408
Packit 116408
G_DEFINE_TYPE_WITH_PRIVATE (DhAssistant, dh_assistant, GTK_TYPE_APPLICATION_WINDOW);
Packit 116408
Packit 116408
static void
Packit 116408
assistant_view_open_uri_cb (DhAssistantView *view,
Packit 116408
                            const char      *uri,
Packit 116408
                            DhAssistant     *assistant)
Packit 116408
{
Packit 116408
        DhApp *app;
Packit 116408
        DhWindow *window;
Packit 116408
Packit 116408
        app = DH_APP (gtk_window_get_application (GTK_WINDOW (assistant)));
Packit 116408
Packit 116408
        window = dh_app_get_active_main_window (app, TRUE);
Packit 116408
        _dh_window_display_uri (window, uri);
Packit 116408
}
Packit 116408
Packit 116408
static gboolean
Packit 116408
dh_assistant_key_press_event (GtkWidget   *widget,
Packit 116408
                              GdkEventKey *event)
Packit 116408
{
Packit 116408
        DhAssistant *assistant = DH_ASSISTANT (widget);
Packit 116408
Packit 116408
        if (event->keyval == GDK_KEY_Escape) {
Packit 116408
                gtk_window_close (GTK_WINDOW (assistant));
Packit 116408
                return GDK_EVENT_STOP;
Packit 116408
        }
Packit 116408
Packit 116408
        return GTK_WIDGET_CLASS (dh_assistant_parent_class)->key_press_event (widget, event);
Packit 116408
}
Packit 116408
Packit 116408
static gboolean
Packit 116408
dh_assistant_delete_event (GtkWidget   *widget,
Packit 116408
                           GdkEventAny *event)
Packit 116408
{
Packit 116408
        DhSettings *settings;
Packit 116408
Packit 116408
        settings = dh_settings_get_singleton ();
Packit 116408
        dh_util_window_settings_save (GTK_WINDOW (widget),
Packit 116408
                                      dh_settings_peek_assistant_settings (settings));
Packit 116408
Packit 116408
        if (GTK_WIDGET_CLASS (dh_assistant_parent_class)->delete_event == NULL)
Packit 116408
                return GDK_EVENT_PROPAGATE;
Packit 116408
Packit 116408
        return GTK_WIDGET_CLASS (dh_assistant_parent_class)->delete_event (widget, event);
Packit 116408
}
Packit 116408
Packit 116408
static void
Packit 116408
dh_assistant_class_init (DhAssistantClass *klass)
Packit 116408
{
Packit 116408
        GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
Packit 116408
Packit 116408
        widget_class->key_press_event = dh_assistant_key_press_event;
Packit 116408
        widget_class->delete_event = dh_assistant_delete_event;
Packit 116408
Packit 116408
        /* Bind class to template */
Packit 116408
        gtk_widget_class_set_template_from_resource (widget_class,
Packit 116408
                                                     "/org/gnome/devhelp/dh-assistant.ui");
Packit 116408
        gtk_widget_class_bind_template_child_private (widget_class, DhAssistant, view);
Packit 116408
}
Packit 116408
Packit 116408
static void
Packit 116408
dh_assistant_init (DhAssistant *assistant)
Packit 116408
{
Packit 116408
        DhAssistantPrivate *priv = dh_assistant_get_instance_private (assistant);
Packit 116408
Packit 116408
        gtk_widget_init_template (GTK_WIDGET (assistant));
Packit 116408
Packit 116408
        g_signal_connect (priv->view, "open-uri",
Packit 116408
                          G_CALLBACK (assistant_view_open_uri_cb),
Packit 116408
                          assistant);
Packit 116408
}
Packit 116408
Packit 116408
DhAssistant *
Packit 116408
dh_assistant_new (DhApp *application)
Packit 116408
{
Packit 116408
        DhAssistant *assistant;
Packit 116408
        DhSettings *settings;
Packit 116408
Packit 116408
        assistant = g_object_new (DH_TYPE_ASSISTANT,
Packit 116408
                                  "application", application,
Packit 116408
                                  NULL);
Packit 116408
Packit 116408
        settings = dh_settings_get_singleton ();
Packit 116408
        gtk_widget_realize (GTK_WIDGET (assistant));
Packit 116408
        dh_util_window_settings_restore (GTK_WINDOW (assistant),
Packit 116408
                                         dh_settings_peek_assistant_settings (settings));
Packit 116408
Packit 116408
        return assistant;
Packit 116408
}
Packit 116408
Packit 116408
gboolean
Packit 116408
dh_assistant_search (DhAssistant *assistant,
Packit 116408
                     const gchar *str)
Packit 116408
{
Packit 116408
        DhAssistantPrivate *priv;
Packit 116408
Packit 116408
        g_return_val_if_fail (DH_IS_ASSISTANT (assistant), FALSE);
Packit 116408
        g_return_val_if_fail (str != NULL, FALSE);
Packit 116408
Packit 116408
        priv = dh_assistant_get_instance_private (assistant);
Packit 116408
Packit 116408
        if (dh_assistant_view_search (DH_ASSISTANT_VIEW (priv->view), str)) {
Packit 116408
                gtk_widget_show (GTK_WIDGET (assistant));
Packit 116408
                return TRUE;
Packit 116408
        }
Packit 116408
Packit 116408
        return FALSE;
Packit 116408
}