Blame src/terminal-mdi-container.c

Packit Service 3bdf47
/*
Packit Service 3bdf47
 * Copyright © 2008, 2010, 2011, 2012 Christian Persch
Packit Service 3bdf47
 *
Packit Service 3bdf47
 * This program is free software: you can redistribute it and/or modify
Packit Service 3bdf47
 * it under the terms of the GNU General Public License as published by
Packit Service 3bdf47
 * the Free Software Foundation, either version 3 of the License, or
Packit Service 3bdf47
 * (at your option) any later version.
Packit Service 3bdf47
 *
Packit Service 3bdf47
 * This program is distributed in the hope that it will be useful,
Packit Service 3bdf47
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 3bdf47
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit Service 3bdf47
 * GNU General Public License for more details.
Packit Service 3bdf47
 *
Packit Service 3bdf47
 * You should have received a copy of the GNU General Public License
Packit Service 3bdf47
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
Packit Service 3bdf47
 */
Packit Service 3bdf47
Packit Service 3bdf47
#include <config.h>
Packit Service 3bdf47
Packit Service 3bdf47
#include "terminal-mdi-container.h"
Packit Service 3bdf47
#include "terminal-debug.h"
Packit Service 3bdf47
#include "terminal-intl.h"
Packit Service 3bdf47
Packit Service 3bdf47
enum {
Packit Service 3bdf47
  SCREEN_ADDED,
Packit Service 3bdf47
  SCREEN_REMOVED,
Packit Service 3bdf47
  SCREEN_SWITCHED,
Packit Service 3bdf47
  SCREENS_REORDERED,
Packit Service 3bdf47
  SCREEN_CLOSE_REQUEST,
Packit Service 3bdf47
  LAST_SIGNAL
Packit Service 3bdf47
};
Packit Service 3bdf47
Packit Service 3bdf47
static guint signals[LAST_SIGNAL];
Packit Service 3bdf47
Packit Service 3bdf47
G_DEFINE_INTERFACE (TerminalMdiContainer, terminal_mdi_container, GTK_TYPE_WIDGET)
Packit Service 3bdf47
Packit Service 3bdf47
static void
Packit Service 3bdf47
terminal_mdi_container_default_init (TerminalMdiContainerInterface *iface)
Packit Service 3bdf47
{
Packit Service 3bdf47
  signals[SCREEN_ADDED] =
Packit Service 3bdf47
    g_signal_new (I_("screen-added"),
Packit Service 3bdf47
                  G_TYPE_FROM_INTERFACE (iface),
Packit Service 3bdf47
                  G_SIGNAL_RUN_LAST,
Packit Service 3bdf47
                  G_STRUCT_OFFSET (TerminalMdiContainerInterface, screen_added),
Packit Service 3bdf47
                  NULL, NULL,
Packit Service 3bdf47
                  g_cclosure_marshal_VOID__OBJECT,
Packit Service 3bdf47
                  G_TYPE_NONE,
Packit Service 3bdf47
                  1, TERMINAL_TYPE_SCREEN);
Packit Service 3bdf47
Packit Service 3bdf47
  signals[SCREEN_ADDED] =
Packit Service 3bdf47
    g_signal_new (I_("screen-removed"),
Packit Service 3bdf47
                  G_TYPE_FROM_INTERFACE (iface),
Packit Service 3bdf47
                  G_SIGNAL_RUN_LAST,
Packit Service 3bdf47
                  G_STRUCT_OFFSET (TerminalMdiContainerInterface, screen_added),
Packit Service 3bdf47
                  NULL, NULL,
Packit Service 3bdf47
                  g_cclosure_marshal_VOID__OBJECT,
Packit Service 3bdf47
                  G_TYPE_NONE,
Packit Service 3bdf47
                  1, TERMINAL_TYPE_SCREEN);
Packit Service 3bdf47
Packit Service 3bdf47
  signals[SCREEN_ADDED] =
Packit Service 3bdf47
    g_signal_new (I_("screen-switched"),
Packit Service 3bdf47
                  G_TYPE_FROM_INTERFACE (iface),
Packit Service 3bdf47
                  G_SIGNAL_RUN_LAST,
Packit Service 3bdf47
                  G_STRUCT_OFFSET (TerminalMdiContainerInterface, screen_switched),
Packit Service 3bdf47
                  NULL, NULL,
Packit Service 3bdf47
                  NULL,
Packit Service 3bdf47
                  G_TYPE_NONE,
Packit Service 3bdf47
                  2, TERMINAL_TYPE_SCREEN, TERMINAL_TYPE_SCREEN);
Packit Service 3bdf47
Packit Service 3bdf47
  signals[SCREENS_REORDERED] =
Packit Service 3bdf47
    g_signal_new (I_("screens-reordered"),
Packit Service 3bdf47
                  G_TYPE_FROM_INTERFACE (iface),
Packit Service 3bdf47
                  G_SIGNAL_RUN_LAST,
Packit Service 3bdf47
                  G_STRUCT_OFFSET (TerminalMdiContainerInterface, screens_reordered),
Packit Service 3bdf47
                  NULL, NULL,
Packit Service 3bdf47
                  g_cclosure_marshal_VOID__VOID,
Packit Service 3bdf47
                  G_TYPE_NONE,
Packit Service 3bdf47
                  0);
Packit Service 3bdf47
Packit Service 3bdf47
  signals[SCREEN_CLOSE_REQUEST] =
Packit Service 3bdf47
    g_signal_new (I_("screen-close-request"),
Packit Service 3bdf47
                  G_TYPE_FROM_INTERFACE (iface),
Packit Service 3bdf47
                  G_SIGNAL_RUN_LAST,
Packit Service 3bdf47
                  G_STRUCT_OFFSET (TerminalMdiContainerInterface, screen_close_request),
Packit Service 3bdf47
                  NULL, NULL,
Packit Service 3bdf47
                  g_cclosure_marshal_VOID__OBJECT,
Packit Service 3bdf47
                  G_TYPE_NONE,
Packit Service 3bdf47
                  1, TERMINAL_TYPE_SCREEN);
Packit Service 3bdf47
Packit Service 3bdf47
  g_object_interface_install_property (iface,
Packit Service 3bdf47
    g_param_spec_object ("active-screen", NULL, NULL,
Packit Service 3bdf47
                         TERMINAL_TYPE_SCREEN,
Packit Service 3bdf47
                         G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
Packit Service 3bdf47
}
Packit Service 3bdf47
Packit Service 3bdf47
/* public API */
Packit Service 3bdf47
Packit Service 3bdf47
void 
Packit Service 3bdf47
terminal_mdi_container_add_screen (TerminalMdiContainer *container,
Packit Service 3bdf47
                                   TerminalScreen *screen)
Packit Service 3bdf47
{
Packit Service 3bdf47
  g_return_if_fail (TERMINAL_IS_MDI_CONTAINER (container));
Packit Service 3bdf47
  g_return_if_fail (TERMINAL_IS_SCREEN (screen));
Packit Service 3bdf47
Packit Service 3bdf47
  TERMINAL_MDI_CONTAINER_GET_IFACE (container)->add_screen (container, screen);
Packit Service 3bdf47
}
Packit Service 3bdf47
Packit Service 3bdf47
void 
Packit Service 3bdf47
terminal_mdi_container_remove_screen (TerminalMdiContainer *container,
Packit Service 3bdf47
                                      TerminalScreen *screen)
Packit Service 3bdf47
{
Packit Service 3bdf47
  g_return_if_fail (TERMINAL_IS_MDI_CONTAINER (container));
Packit Service 3bdf47
  g_return_if_fail (TERMINAL_IS_SCREEN (screen));
Packit Service 3bdf47
Packit Service 3bdf47
  TERMINAL_MDI_CONTAINER_GET_IFACE (container)->remove_screen (container, screen);
Packit Service 3bdf47
}
Packit Service 3bdf47
Packit Service 3bdf47
TerminalScreen *
Packit Service 3bdf47
terminal_mdi_container_get_active_screen (TerminalMdiContainer *container)
Packit Service 3bdf47
{
Packit Service 3bdf47
  g_return_val_if_fail (TERMINAL_IS_MDI_CONTAINER (container), NULL);
Packit Service 3bdf47
Packit Service 3bdf47
  return TERMINAL_MDI_CONTAINER_GET_IFACE (container)->get_active_screen (container);
Packit Service 3bdf47
}
Packit Service 3bdf47
Packit Service 3bdf47
void 
Packit Service 3bdf47
terminal_mdi_container_set_active_screen (TerminalMdiContainer *container,
Packit Service 3bdf47
                                          TerminalScreen *screen)
Packit Service 3bdf47
{
Packit Service 3bdf47
  g_return_if_fail (TERMINAL_IS_MDI_CONTAINER (container));
Packit Service 3bdf47
  g_return_if_fail (TERMINAL_IS_SCREEN (screen));
Packit Service 3bdf47
Packit Service 3bdf47
  TERMINAL_MDI_CONTAINER_GET_IFACE (container)->set_active_screen (container, screen);
Packit Service 3bdf47
}
Packit Service 3bdf47
Packit Service 3bdf47
Packit Service 3bdf47
GList *
Packit Service 3bdf47
terminal_mdi_container_list_screens (TerminalMdiContainer *container)
Packit Service 3bdf47
{
Packit Service 3bdf47
  g_return_val_if_fail (TERMINAL_IS_MDI_CONTAINER (container), NULL);
Packit Service 3bdf47
Packit Service 3bdf47
  return TERMINAL_MDI_CONTAINER_GET_IFACE (container)->list_screens (container);
Packit Service 3bdf47
}
Packit Service 3bdf47
Packit Service 3bdf47
GList *
Packit Service 3bdf47
terminal_mdi_container_list_screen_containers (TerminalMdiContainer *container)
Packit Service 3bdf47
{
Packit Service 3bdf47
  g_return_val_if_fail (TERMINAL_IS_MDI_CONTAINER (container), NULL);
Packit Service 3bdf47
Packit Service 3bdf47
  return TERMINAL_MDI_CONTAINER_GET_IFACE (container)->list_screen_containers (container);
Packit Service 3bdf47
}
Packit Service 3bdf47
Packit Service 3bdf47
int
Packit Service 3bdf47
terminal_mdi_container_get_n_screens (TerminalMdiContainer *container)
Packit Service 3bdf47
{
Packit Service 3bdf47
  g_return_val_if_fail (TERMINAL_IS_MDI_CONTAINER (container), 0);
Packit Service 3bdf47
Packit Service 3bdf47
  return TERMINAL_MDI_CONTAINER_GET_IFACE (container)->get_n_screens (container);
Packit Service 3bdf47
}
Packit Service 3bdf47
Packit Service 3bdf47
int
Packit Service 3bdf47
terminal_mdi_container_get_active_screen_num (TerminalMdiContainer *container)
Packit Service 3bdf47
{
Packit Service 3bdf47
  g_return_val_if_fail (TERMINAL_IS_MDI_CONTAINER (container), -1);
Packit Service 3bdf47
Packit Service 3bdf47
  return TERMINAL_MDI_CONTAINER_GET_IFACE (container)->get_active_screen_num (container);
Packit Service 3bdf47
}
Packit Service 3bdf47
Packit Service 3bdf47
void
Packit Service 3bdf47
terminal_mdi_container_set_active_screen_num (TerminalMdiContainer *container,
Packit Service 3bdf47
                                              int position)
Packit Service 3bdf47
{
Packit Service 3bdf47
  g_return_if_fail (TERMINAL_IS_MDI_CONTAINER (container));
Packit Service 3bdf47
Packit Service 3bdf47
  TERMINAL_MDI_CONTAINER_GET_IFACE (container)->set_active_screen_num (container, position);
Packit Service 3bdf47
}
Packit Service 3bdf47
Packit Service 3bdf47
void
Packit Service 3bdf47
terminal_mdi_container_reorder_screen (TerminalMdiContainer *container,
Packit Service 3bdf47
                                       TerminalScreen *screen,
Packit Service 3bdf47
                                       int new_position)
Packit Service 3bdf47
{
Packit Service 3bdf47
  g_return_if_fail (TERMINAL_IS_MDI_CONTAINER (container));
Packit Service 3bdf47
Packit Service 3bdf47
  return TERMINAL_MDI_CONTAINER_GET_IFACE (container)->reorder_screen (container, screen, new_position);
Packit Service 3bdf47
}
Packit Service 3bdf47
Packit Service 3bdf47
void
Packit Service 3bdf47
terminal_mdi_container_change_screen (TerminalMdiContainer *container,
Packit Service 3bdf47
                                      int change)
Packit Service 3bdf47
{
Packit Service 3bdf47
  int active, n;
Packit Service 3bdf47
Packit Service 3bdf47
  g_return_if_fail (TERMINAL_IS_MDI_CONTAINER (container));
Packit Service 3bdf47
  g_return_if_fail (change == -1 || change == 1);
Packit Service 3bdf47
Packit Service 3bdf47
  n = terminal_mdi_container_get_n_screens (container);
Packit Service 3bdf47
  active = terminal_mdi_container_get_active_screen_num (container);
Packit Service 3bdf47
Packit Service 3bdf47
  active += change;
Packit Service 3bdf47
  if (active < 0)
Packit Service 3bdf47
    active = n - 1;
Packit Service 3bdf47
  else if (active >= n)
Packit Service 3bdf47
    active = 0;
Packit Service 3bdf47
Packit Service 3bdf47
  terminal_mdi_container_set_active_screen_num (container, active);
Packit Service 3bdf47
}