00001 #include <gtask-ui/gtask-ui-manager.h>
00002
00003 #include <gtask/gtask-task-packet.h>
00004
00005 #include "gtask-internals.h"
00006
00009
00010
00011 #define WANT_WINDOWS_KEY "/apps/gtask/enable_per_program_window"
00012
00013 static gpointer parent_class;
00014
00015 static void
00016 gtask_ui_manager_class_init( GTaskUIManagerClass *klass );
00017
00018 static void
00019 gtask_ui_manager_init( GTaskUIManager *ui_manager, gpointer g_class );
00020
00021 static void
00022 gtask_ui_manager_dispose( GObject *obj );
00023
00024 static void
00025 gtask_ui_manager_finalize( GObject *obj );
00026
00027 static void
00028 gtask_ui_manager_task_window_destroyed( GtkObject *obj, gpointer data );
00029
00030 static void
00031 gtask_ui_manager_private_pref_change( GConfClient *client,
00032 guint conn_id,
00033 GConfEntry *entry,
00034 gpointer data);
00035
00036 GType gtask_ui_manager_get_type( void ) {
00037 static GType type = 0;
00038
00039 if( type == 0 ) {
00040 static const GTypeInfo info = {
00041 sizeof( GTaskUIManagerClass ),
00042 NULL,
00043 NULL,
00044 (GClassInitFunc) gtask_ui_manager_class_init,
00045 NULL,
00046 NULL,
00047 sizeof( GTaskUIManager ),
00048 0,
00049 (GInstanceInitFunc) gtask_ui_manager_init
00050 };
00051
00052 type = g_type_register_static( G_TYPE_OBJECT,
00053 "GTaskUIManager",
00054 &info,
00055 0 );
00056 }
00057
00058 return type;
00059 }
00060
00061 static void
00062 gtask_ui_manager_class_init( GTaskUIManagerClass *klass ) {
00063 GObjectClass *gobject_class = G_OBJECT_CLASS( klass );
00064
00065 parent_class = g_type_class_peek_parent( klass );
00066
00067 gobject_class->dispose = gtask_ui_manager_dispose;
00068 gobject_class->finalize = gtask_ui_manager_finalize;
00069 }
00070
00071 static void
00072 gtask_ui_manager_init( GTaskUIManager *ui_manager, gpointer g_class ) {
00073 GTaskUIManagerPrivate *private;
00074
00075 private = g_new0( GTaskUIManagerPrivate, 1 );
00076
00077 private->gconf_client = gconf_client_get_default( );
00078 private->task_window = NULL;
00079 private->display_task_window = TRUE;
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094 ui_manager->private = private;
00095 }
00096
00097 static void
00098 gtask_ui_manager_dispose( GObject *obj ) {
00100 }
00101
00102 static void
00103 gtask_ui_manager_finalize( GObject *obj ) {
00105 }
00106
00114 GTaskUIManager *
00115 gtask_ui_manager_new( ) {
00116 return g_object_new( GTASK_UI_MANAGER_TYPE, NULL );
00117 }
00118
00119 gboolean
00120 gtask_ui_manager_private_task_event( GTaskEventDispatcher *dispatcher,
00121 GObject *i_packet,
00122 gpointer data )
00123 {
00124 GTaskUIManagerPrivate *private;
00125 GTaskTaskPacket *packet;
00126 GTaskGenericTask *task;
00127
00128 g_debug( "IN: gtask_ui_manager_private_task_event" );
00129
00130 g_return_val_if_fail( GTASK_IS_UI_MANAGER( data ), FALSE );
00131
00132 if( !GTASK_IS_TASK_PACKET( i_packet ) ) {
00133 g_debug( "hmmm . . we were not passed a task packet . . ignore" );
00134 return TRUE;
00135 }
00136
00137 private = GTASK_UI_MANAGER( data )->private;
00138 packet = GTASK_TASK_PACKET( i_packet );
00139
00140 if( !private->display_task_window ) {
00141 g_debug( "no task window should be displayed" );
00142 return TRUE;
00143 }
00144
00145 g_debug( "displaying task window" );
00146
00147 if( !private->task_window ) {
00148 private->task_window = gtask_window_new_with_name( NULL, NULL );
00149
00150 g_signal_connect( private->task_window,
00151 "destroy",
00152 (GCallback) gtask_ui_manager_task_window_destroyed,
00153 data );
00154
00155 gtk_widget_show_all( GTK_WIDGET( private->task_window ) );
00156 }
00157
00158 task = gtask_task_packet_get_task( packet );
00159
00160
00161
00162 gtask_window_add_task( private->task_window, task );
00163
00164 g_debug( "LEAVING: gtask_ui_manager_private_task_event" );
00165
00166 return TRUE;
00167 }
00168
00169 static void
00170 gtask_ui_manager_task_window_destroyed( GtkObject *obj, gpointer data ) {
00171 GTaskUIManagerPrivate *private;
00172
00173 g_return_if_fail( GTASK_IS_UI_MANAGER( data ) );
00174
00175 g_debug( "IN: gtask_ui_manager_task_window_destroyed" );
00176
00177 private = GTASK_UI_MANAGER( data )->private;
00178
00179 if( GTK_OBJECT( obj ) == GTK_OBJECT( private->task_window ) ) {
00180 private->task_window = NULL;
00181 }
00182
00183 g_debug( "LEAVING: gtask_ui_manager_task_window_destroyed" );
00184 }
00185
00186 static void
00187 gtask_ui_manager_private_pref_change( GConfClient *client,
00188 guint conn_id,
00189 GConfEntry *entry,
00190 gpointer data)
00191 {
00192 GTaskUIManager *ui_manager;
00193 const char *key = gconf_entry_get_key( entry );
00194 GConfValue *val;
00195
00196 g_debug( "IN: gtask_ui_manager_private_pref_change" );
00197
00198 g_warning( "GConf pref change on key: %s", key );
00199
00200 g_return_if_fail( GTASK_IS_UI_MANAGER( data ) );
00201
00202 if( strcmp( key, WANT_WINDOWS_KEY ) != 0 )
00203 return;
00204
00205 ui_manager = GTASK_UI_MANAGER( data );
00206
00207 val = gconf_entry_get_value( entry );
00208
00209 ui_manager->private->display_task_window = gconf_value_get_bool( val );
00210
00211 g_debug( "LEAVING: gtask_ui_manager_private_pref_change" );
00212 }
00213
00214