|
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 |
}
|