Linux: Save slots are now disabled in the menu unless a) a game is running, and b) it was saved with the same game as you are running. So you should now be able to tell at a glance which slots you've used. Experimental...

git-svn-id: http://pcsx2.googlecode.com/svn/trunk@448 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
arcum42 2009-02-08 01:41:00 +00:00
parent 22bacc999e
commit 5ad9f85500
8 changed files with 182 additions and 201 deletions

View File

@ -58,6 +58,8 @@ void SetComboToGList(GtkComboBox *widget, GList *list);
static void ConfPlugin(PluginConf confs, char* plugin, const char* name);
static void TestPlugin(PluginConf confs, char* plugin, const char* name);
extern void CheckSlots();

View File

@ -78,7 +78,7 @@ extern void SaveConfig();
extern void SysRestorableReset();
extern void SignalExit(int sig);
extern bool isSlotUsed(int num);
typedef struct
{
char lang[g_MaxPath];

View File

@ -28,7 +28,7 @@ const char* g_pRunGSState = NULL;
int efile = 0;
char elfname[g_MaxPath];
int Slots[5] = { -1, -1, -1, -1, -1 };
bool Slots[5] = { false, false, false, false, false };
#ifdef PCSX2_DEVBUILD
TESTRUNARGS g_TestRun;
@ -217,7 +217,7 @@ int main(int argc, char *argv[])
return 0;
}
#endif
if (UseGui && (file == NULL))
{
StartGui();
@ -228,7 +228,6 @@ int main(int argc, char *argv[])
SysReset();
//FixCPUState();
cpuExecuteBios();
if (file) strcpy(elfname, file);
if (!efile) efile = GetPS2ElfName(elfname);
@ -359,19 +358,14 @@ void StartGui()
#ifndef PCSX2_DEVBUILD
gtk_widget_set_sensitive(GTK_WIDGET(lookup_widget(MainWindow, "GtkMenuItem_Logging")), FALSE);
#endif
CheckSlots();
gtk_widget_show_all(MainWindow);
gtk_window_activate_focus(GTK_WINDOW(MainWindow));
gtk_main();
}
/*void FixCPUState(void)
{
//Config.sseMXCSR = LinuxsseMXCSR;
//Config.sseVUMXCSR = LinuxsseVUMXCSR;
SetCPUState(Config.sseMXCSR, Config.sseVUMXCSR);
}*/
void OnDestroy(GtkObject *object, gpointer user_data) {}
gboolean OnDelete(GtkWidget *widget, GdkEvent *event, gpointer user_data)
@ -505,33 +499,45 @@ void OnEmu_Reset(GtkMenuItem *menuitem, gpointer user_data)
SysReset();
}
void ResetMenuSlots(GtkMenuItem *menuitem, gpointer user_data)
void ResetMenuSlots()
{
GtkWidget *Item;
char str[g_MaxPath];
char str[g_MaxPath], str2[g_MaxPath];
int i;
for (i = 0; i < 5; i++)
{
sprintf(str, "GtkMenuItem_LoadSlot%d", i + 1);
sprintf(str, "load_slot_%d", i);
sprintf(str2, "save_slot_%d", i);
Item = lookup_widget(MainWindow, str);
if (Slots[i] == -1)
gtk_widget_set_sensitive(Item, FALSE);
if GTK_IS_WIDGET(Item)
gtk_widget_set_sensitive(Item, Slots[i]);
else
gtk_widget_set_sensitive(Item, TRUE);
Console::Error("No such widget: %s", params str);
Item = lookup_widget(MainWindow, str2);
gtk_widget_set_sensitive(Item, (ElfCRC != 0));
}
}
/*void UpdateMenuSlots(GtkMenuItem *menuitem, gpointer user_data) {
char str[g_MaxPath];
void CheckSlots()
{
int i = 0;
for (i=0; i<5; i++) {
sprintf(str, SSTATES_DIR "/%8.8X.%3.3d", ElfCRC, i);
Slots[i] = CheckState(str);
if (ElfCRC == 0) Console::Notice("Disabling game slots until a game is loaded.");
for (i=0; i<5; i++)
{
if (isSlotUsed(i))
Slots[i] = true;
else
Slots[i] = false;
}
}*/
ResetMenuSlots();
}
//2002-09-28 (Florin)
void OnArguments_Ok(GtkButton *button, gpointer user_data)

View File

@ -30,6 +30,8 @@ extern bool g_EmulationInProgress; // Set TRUE if a game is actively running (se
extern void RunExecute(const char* elf_file, bool use_bios = false);
void OnLanguage(GtkMenuItem *menuitem, gpointer user_data);
extern void ExecuteCpu();
extern void CheckSlots();
extern bool isSlotUsed(int num);
void InitLanguages();
char *GetLanguageNext();

View File

@ -198,7 +198,6 @@ void RunExecute(const char* elf_file, bool use_bios)
loadElfFile(elf_file);
}
//FixCPUState();
ExecuteCpu();
}
@ -281,6 +280,13 @@ public:
}
};
bool isSlotUsed(int num)
{
if (ElfCRC == 0)
return false;
else
return Path::isFile(SaveState::GetFilename( num ));
}
void States_Load(const string& file, int num = -1)
{
@ -380,6 +386,7 @@ void States_Save( const string& file, int num = -1 )
Console::Error( message.c_str() );
}
CheckSlots();
}
void States_Save(int num)
@ -436,25 +443,23 @@ public:
}
};
void OnStates_Load1(GtkMenuItem *menuitem, gpointer user_data)
void OnStates_Load(GtkMenuItem *menuitem, gpointer user_data)
{
States_Load(0);
}
void OnStates_Load2(GtkMenuItem *menuitem, gpointer user_data)
{
States_Load(1);
}
void OnStates_Load3(GtkMenuItem *menuitem, gpointer user_data)
{
States_Load(2);
}
void OnStates_Load4(GtkMenuItem *menuitem, gpointer user_data)
{
States_Load(3);
}
void OnStates_Load5(GtkMenuItem *menuitem, gpointer user_data)
{
States_Load(4);
char *name;
int i;
if (GTK_BIN (menuitem)->child)
{
GtkWidget *child = GTK_BIN (menuitem)->child;
if (GTK_IS_LABEL (child))
gtk_label_get (GTK_LABEL (child), &name);
else
return;
}
sscanf(name, "Slot %d", &i);
States_Load(i);
}
void OnLoadOther_Ok(GtkButton* button, gpointer user_data)
@ -493,25 +498,23 @@ void OnStates_LoadOther(GtkMenuItem *menuitem, gpointer user_data)
gdk_window_raise(FileSel->window);
}
void OnStates_Save1(GtkMenuItem *menuitem, gpointer user_data)
void OnStates_Save(GtkMenuItem *menuitem, gpointer user_data)
{
States_Save(0);
}
void OnStates_Save2(GtkMenuItem *menuitem, gpointer user_data)
{
States_Save(1);
}
void OnStates_Save3(GtkMenuItem *menuitem, gpointer user_data)
{
States_Save(2);
}
void OnStates_Save4(GtkMenuItem *menuitem, gpointer user_data)
{
States_Save(3);
}
void OnStates_Save5(GtkMenuItem *menuitem, gpointer user_data)
{
States_Save(4);
char *name;
int i;
if (GTK_BIN (menuitem)->child)
{
GtkWidget *child = GTK_BIN (menuitem)->child;
if (GTK_IS_LABEL (child))
gtk_label_get (GTK_LABEL (child), &name);
else
return;
}
sscanf(name, "Slot %d", &i);
States_Save(i);
}
void OnSaveOther_Ok(GtkButton* button, gpointer user_data)

View File

@ -239,23 +239,7 @@ OnFile_LoadElf (GtkMenuItem *menuitem,
gpointer user_data);
void
OnStates_Load1 (GtkMenuItem *menuitem,
gpointer user_data);
void
OnStates_Load2 (GtkMenuItem *menuitem,
gpointer user_data);
void
OnStates_Load3 (GtkMenuItem *menuitem,
gpointer user_data);
void
OnStates_Load4 (GtkMenuItem *menuitem,
gpointer user_data);
void
OnStates_Load5 (GtkMenuItem *menuitem,
OnStates_Load (GtkMenuItem *menuitem,
gpointer user_data);
void
@ -263,23 +247,7 @@ OnStates_LoadOther (GtkMenuItem *menuitem,
gpointer user_data);
void
OnStates_Save1 (GtkMenuItem *menuitem,
gpointer user_data);
void
OnStates_Save2 (GtkMenuItem *menuitem,
gpointer user_data);
void
OnStates_Save3 (GtkMenuItem *menuitem,
gpointer user_data);
void
OnStates_Save4 (GtkMenuItem *menuitem,
gpointer user_data);
void
OnStates_Save5 (GtkMenuItem *menuitem,
OnStates_Save (GtkMenuItem *menuitem,
gpointer user_data);
void

View File

@ -2401,19 +2401,19 @@ create_MainWindow (void)
GtkWidget *states1_menu;
GtkWidget *load1;
GtkWidget *load1_menu;
GtkWidget *slot_1;
GtkWidget *slot_2;
GtkWidget *slot_3_;
GtkWidget *slot_4;
GtkWidget *slot_5;
GtkWidget *load_slot_0;
GtkWidget *load_slot_1;
GtkWidget *load_slot_2;
GtkWidget *load_slot_3;
GtkWidget *load_slot_4;
GtkWidget *other1;
GtkWidget *save1;
GtkWidget *save1_menu;
GtkWidget *slot_6;
GtkWidget *slot_7;
GtkWidget *slot_8;
GtkWidget *slot_9;
GtkWidget *slot_10;
GtkWidget *save_slot_0;
GtkWidget *save_slot_1;
GtkWidget *save_slot_2;
GtkWidget *save_slot_3;
GtkWidget *save_slot_4;
GtkWidget *other2;
GtkWidget *GtkMenuItem_Exit;
GtkWidget *GtkMenuItem_Emulator;
@ -2501,25 +2501,25 @@ create_MainWindow (void)
load1_menu = gtk_menu_new ();
gtk_menu_item_set_submenu (GTK_MENU_ITEM (load1), load1_menu);
slot_1 = gtk_menu_item_new_with_mnemonic (_("Slot 1"));
gtk_widget_show (slot_1);
gtk_container_add (GTK_CONTAINER (load1_menu), slot_1);
load_slot_0 = gtk_menu_item_new_with_mnemonic (_("Slot 0"));
gtk_widget_show (load_slot_0);
gtk_container_add (GTK_CONTAINER (load1_menu), load_slot_0);
slot_2 = gtk_menu_item_new_with_mnemonic (_("Slot 2"));
gtk_widget_show (slot_2);
gtk_container_add (GTK_CONTAINER (load1_menu), slot_2);
load_slot_1 = gtk_menu_item_new_with_mnemonic (_("Slot 1"));
gtk_widget_show (load_slot_1);
gtk_container_add (GTK_CONTAINER (load1_menu), load_slot_1);
slot_3_ = gtk_menu_item_new_with_mnemonic (_("Slot 3"));
gtk_widget_show (slot_3_);
gtk_container_add (GTK_CONTAINER (load1_menu), slot_3_);
load_slot_2 = gtk_menu_item_new_with_mnemonic (_("Slot 2"));
gtk_widget_show (load_slot_2);
gtk_container_add (GTK_CONTAINER (load1_menu), load_slot_2);
slot_4 = gtk_menu_item_new_with_mnemonic (_("Slot 4"));
gtk_widget_show (slot_4);
gtk_container_add (GTK_CONTAINER (load1_menu), slot_4);
load_slot_3 = gtk_menu_item_new_with_mnemonic (_("Slot 3"));
gtk_widget_show (load_slot_3);
gtk_container_add (GTK_CONTAINER (load1_menu), load_slot_3);
slot_5 = gtk_menu_item_new_with_mnemonic (_("Slot 5"));
gtk_widget_show (slot_5);
gtk_container_add (GTK_CONTAINER (load1_menu), slot_5);
load_slot_4 = gtk_menu_item_new_with_mnemonic (_("Slot 4"));
gtk_widget_show (load_slot_4);
gtk_container_add (GTK_CONTAINER (load1_menu), load_slot_4);
other1 = gtk_menu_item_new_with_mnemonic (_("Other..."));
gtk_widget_show (other1);
@ -2532,25 +2532,25 @@ create_MainWindow (void)
save1_menu = gtk_menu_new ();
gtk_menu_item_set_submenu (GTK_MENU_ITEM (save1), save1_menu);
slot_6 = gtk_menu_item_new_with_mnemonic (_("Slot 1"));
gtk_widget_show (slot_6);
gtk_container_add (GTK_CONTAINER (save1_menu), slot_6);
save_slot_0 = gtk_menu_item_new_with_mnemonic (_("Slot 0"));
gtk_widget_show (save_slot_0);
gtk_container_add (GTK_CONTAINER (save1_menu), save_slot_0);
slot_7 = gtk_menu_item_new_with_mnemonic (_("Slot 2"));
gtk_widget_show (slot_7);
gtk_container_add (GTK_CONTAINER (save1_menu), slot_7);
save_slot_1 = gtk_menu_item_new_with_mnemonic (_("Slot 1"));
gtk_widget_show (save_slot_1);
gtk_container_add (GTK_CONTAINER (save1_menu), save_slot_1);
slot_8 = gtk_menu_item_new_with_mnemonic (_("Slot 3"));
gtk_widget_show (slot_8);
gtk_container_add (GTK_CONTAINER (save1_menu), slot_8);
save_slot_2 = gtk_menu_item_new_with_mnemonic (_("Slot 2"));
gtk_widget_show (save_slot_2);
gtk_container_add (GTK_CONTAINER (save1_menu), save_slot_2);
slot_9 = gtk_menu_item_new_with_mnemonic (_("Slot 4"));
gtk_widget_show (slot_9);
gtk_container_add (GTK_CONTAINER (save1_menu), slot_9);
save_slot_3 = gtk_menu_item_new_with_mnemonic (_("Slot 3"));
gtk_widget_show (save_slot_3);
gtk_container_add (GTK_CONTAINER (save1_menu), save_slot_3);
slot_10 = gtk_menu_item_new_with_mnemonic (_("Slot 5"));
gtk_widget_show (slot_10);
gtk_container_add (GTK_CONTAINER (save1_menu), slot_10);
save_slot_4 = gtk_menu_item_new_with_mnemonic (_("Slot 4"));
gtk_widget_show (save_slot_4);
gtk_container_add (GTK_CONTAINER (save1_menu), save_slot_4);
other2 = gtk_menu_item_new_with_mnemonic (_("Other..."));
gtk_widget_show (other2);
@ -2722,38 +2722,38 @@ create_MainWindow (void)
g_signal_connect ((gpointer) GtkMenuItem_LoadElf, "activate",
G_CALLBACK (OnFile_LoadElf),
NULL);
g_signal_connect ((gpointer) slot_1, "activate",
G_CALLBACK (OnStates_Load1),
g_signal_connect ((gpointer) load_slot_0, "activate",
G_CALLBACK (OnStates_Load),
NULL);
g_signal_connect ((gpointer) slot_2, "activate",
G_CALLBACK (OnStates_Load2),
g_signal_connect ((gpointer) load_slot_1, "activate",
G_CALLBACK (OnStates_Load),
NULL);
g_signal_connect ((gpointer) slot_3_, "activate",
G_CALLBACK (OnStates_Load3),
g_signal_connect ((gpointer) load_slot_2, "activate",
G_CALLBACK (OnStates_Load),
NULL);
g_signal_connect ((gpointer) slot_4, "activate",
G_CALLBACK (OnStates_Load4),
g_signal_connect ((gpointer) load_slot_3, "activate",
G_CALLBACK (OnStates_Load),
NULL);
g_signal_connect ((gpointer) slot_5, "activate",
G_CALLBACK (OnStates_Load5),
g_signal_connect ((gpointer) load_slot_4, "activate",
G_CALLBACK (OnStates_Load),
NULL);
g_signal_connect ((gpointer) other1, "activate",
G_CALLBACK (OnStates_LoadOther),
NULL);
g_signal_connect ((gpointer) slot_6, "activate",
G_CALLBACK (OnStates_Save1),
g_signal_connect ((gpointer) save_slot_0, "activate",
G_CALLBACK (OnStates_Save),
NULL);
g_signal_connect ((gpointer) slot_7, "activate",
G_CALLBACK (OnStates_Save2),
g_signal_connect ((gpointer) save_slot_1, "activate",
G_CALLBACK (OnStates_Save),
NULL);
g_signal_connect ((gpointer) slot_8, "activate",
G_CALLBACK (OnStates_Save3),
g_signal_connect ((gpointer) save_slot_2, "activate",
G_CALLBACK (OnStates_Save),
NULL);
g_signal_connect ((gpointer) slot_9, "activate",
G_CALLBACK (OnStates_Save4),
g_signal_connect ((gpointer) save_slot_3, "activate",
G_CALLBACK (OnStates_Save),
NULL);
g_signal_connect ((gpointer) slot_10, "activate",
G_CALLBACK (OnStates_Save5),
g_signal_connect ((gpointer) save_slot_4, "activate",
G_CALLBACK (OnStates_Save),
NULL);
g_signal_connect ((gpointer) other2, "activate",
G_CALLBACK (OnStates_SaveOther),
@ -2841,19 +2841,19 @@ create_MainWindow (void)
GLADE_HOOKUP_OBJECT (MainWindow, states1_menu, "states1_menu");
GLADE_HOOKUP_OBJECT (MainWindow, load1, "load1");
GLADE_HOOKUP_OBJECT (MainWindow, load1_menu, "load1_menu");
GLADE_HOOKUP_OBJECT (MainWindow, slot_1, "slot_1");
GLADE_HOOKUP_OBJECT (MainWindow, slot_2, "slot_2");
GLADE_HOOKUP_OBJECT (MainWindow, slot_3_, "slot_3_");
GLADE_HOOKUP_OBJECT (MainWindow, slot_4, "slot_4");
GLADE_HOOKUP_OBJECT (MainWindow, slot_5, "slot_5");
GLADE_HOOKUP_OBJECT (MainWindow, load_slot_0, "load_slot_0");
GLADE_HOOKUP_OBJECT (MainWindow, load_slot_1, "load_slot_1");
GLADE_HOOKUP_OBJECT (MainWindow, load_slot_2, "load_slot_2");
GLADE_HOOKUP_OBJECT (MainWindow, load_slot_3, "load_slot_3");
GLADE_HOOKUP_OBJECT (MainWindow, load_slot_4, "load_slot_4");
GLADE_HOOKUP_OBJECT (MainWindow, other1, "other1");
GLADE_HOOKUP_OBJECT (MainWindow, save1, "save1");
GLADE_HOOKUP_OBJECT (MainWindow, save1_menu, "save1_menu");
GLADE_HOOKUP_OBJECT (MainWindow, slot_6, "slot_6");
GLADE_HOOKUP_OBJECT (MainWindow, slot_7, "slot_7");
GLADE_HOOKUP_OBJECT (MainWindow, slot_8, "slot_8");
GLADE_HOOKUP_OBJECT (MainWindow, slot_9, "slot_9");
GLADE_HOOKUP_OBJECT (MainWindow, slot_10, "slot_10");
GLADE_HOOKUP_OBJECT (MainWindow, save_slot_0, "save_slot_0");
GLADE_HOOKUP_OBJECT (MainWindow, save_slot_1, "save_slot_1");
GLADE_HOOKUP_OBJECT (MainWindow, save_slot_2, "save_slot_2");
GLADE_HOOKUP_OBJECT (MainWindow, save_slot_3, "save_slot_3");
GLADE_HOOKUP_OBJECT (MainWindow, save_slot_4, "save_slot_4");
GLADE_HOOKUP_OBJECT (MainWindow, other2, "other2");
GLADE_HOOKUP_OBJECT (MainWindow, GtkMenuItem_Exit, "GtkMenuItem_Exit");
GLADE_HOOKUP_OBJECT (MainWindow, GtkMenuItem_Emulator, "GtkMenuItem_Emulator");

View File

@ -4797,47 +4797,47 @@ Version x.x</property>
<widget class="GtkMenu" id="load1_menu">
<child>
<widget class="GtkMenuItem" id="slot_1">
<widget class="GtkMenuItem" id="load_slot_0">
<property name="visible">True</property>
<property name="label" translatable="yes">Slot 0</property>
<property name="use_underline">True</property>
<signal name="activate" handler="OnStates_Load" last_modification_time="Sun, 08 Feb 2009 01:08:22 GMT"/>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="load_slot_1">
<property name="visible">True</property>
<property name="label" translatable="yes">Slot 1</property>
<property name="use_underline">True</property>
<signal name="activate" handler="OnStates_Load1"/>
<signal name="activate" handler="OnStates_Load" last_modification_time="Sun, 08 Feb 2009 01:08:22 GMT"/>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="slot_2">
<widget class="GtkMenuItem" id="load_slot_2">
<property name="visible">True</property>
<property name="label" translatable="yes">Slot 2</property>
<property name="use_underline">True</property>
<signal name="activate" handler="OnStates_Load2"/>
<signal name="activate" handler="OnStates_Load" last_modification_time="Sun, 08 Feb 2009 01:08:22 GMT"/>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="slot_3\">
<widget class="GtkMenuItem" id="load_slot_3">
<property name="visible">True</property>
<property name="label" translatable="yes">Slot 3</property>
<property name="use_underline">True</property>
<signal name="activate" handler="OnStates_Load3"/>
<signal name="activate" handler="OnStates_Load" last_modification_time="Sun, 08 Feb 2009 01:08:22 GMT"/>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="slot_4">
<widget class="GtkMenuItem" id="load_slot_4">
<property name="visible">True</property>
<property name="label" translatable="yes">Slot 4</property>
<property name="use_underline">True</property>
<signal name="activate" handler="OnStates_Load4"/>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="slot_5">
<property name="visible">True</property>
<property name="label" translatable="yes">Slot 5</property>
<property name="use_underline">True</property>
<signal name="activate" handler="OnStates_Load5"/>
<signal name="activate" handler="OnStates_Load" last_modification_time="Sun, 08 Feb 2009 01:08:22 GMT"/>
</widget>
</child>
@ -4864,47 +4864,47 @@ Version x.x</property>
<widget class="GtkMenu" id="save1_menu">
<child>
<widget class="GtkMenuItem" id="slot_6">
<widget class="GtkMenuItem" id="save_slot_0">
<property name="visible">True</property>
<property name="label" translatable="yes">Slot 0</property>
<property name="use_underline">True</property>
<signal name="activate" handler="OnStates_Save" last_modification_time="Sun, 08 Feb 2009 01:08:22 GMT"/>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="save_slot_1">
<property name="visible">True</property>
<property name="label" translatable="yes">Slot 1</property>
<property name="use_underline">True</property>
<signal name="activate" handler="OnStates_Save1"/>
<signal name="activate" handler="OnStates_Save" last_modification_time="Sun, 08 Feb 2009 01:08:22 GMT"/>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="slot_7">
<widget class="GtkMenuItem" id="save_slot_2">
<property name="visible">True</property>
<property name="label" translatable="yes">Slot 2</property>
<property name="use_underline">True</property>
<signal name="activate" handler="OnStates_Save2"/>
<signal name="activate" handler="OnStates_Save" last_modification_time="Sun, 08 Feb 2009 01:08:22 GMT"/>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="slot_8">
<widget class="GtkMenuItem" id="save_slot_3">
<property name="visible">True</property>
<property name="label" translatable="yes">Slot 3</property>
<property name="use_underline">True</property>
<signal name="activate" handler="OnStates_Save3"/>
<signal name="activate" handler="OnStates_Save" last_modification_time="Sun, 08 Feb 2009 01:08:22 GMT"/>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="slot_9">
<widget class="GtkMenuItem" id="save_slot_4">
<property name="visible">True</property>
<property name="label" translatable="yes">Slot 4</property>
<property name="use_underline">True</property>
<signal name="activate" handler="OnStates_Save4"/>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="slot_10">
<property name="visible">True</property>
<property name="label" translatable="yes">Slot 5</property>
<property name="use_underline">True</property>
<signal name="activate" handler="OnStates_Save5"/>
<signal name="activate" handler="OnStates_Save" last_modification_time="Sun, 08 Feb 2009 01:08:22 GMT"/>
</widget>
</child>