Patch Minimo in mozilla-source-1.7.3.tar.bz2

João Leite <[email protected]> Thu, 23 Dec 2004 15:23:02 -0400
Newsgroups gmane.comp.mozilla.devel.small-devices
Message-ID <[email protected]>
Hi all,

In this patch we've inserted on Minimo.cpp the notebook struct and
new toolbar, that is located on botton window, for use notebook buttons and
new other functions, which you can make.
We are using mozilla-source-1.7.3.tar.bz2.

We need help to connect the find function, because
we try to do this.

Best Regards
--
patch_10LE_minimo.diff (text/x-patch, 12.6 KB)
diff -urN mozilla/embedding/minimo/app/icons.h mozilla_10LE/embedding/minimo/app/icons.h
--- mozilla/embedding/minimo/app/icons.h	2004-01-30 03:36:31.000000000 -0400
+++ mozilla_10LE/embedding/minimo/app/icons.h	2004-12-23 14:47:10.000000000 -0400
@@ -347,3 +347,69 @@
 "  .oooOooOooo.  ",
 "   .oooooooo.   ",
 "    ........    "};
+
+/* XPM */
+static char * show_notebook_xpm[] = {
+"16 16 2 1",
+" 	c None",
+".	c #000000",
+"                ",
+" .............. ",
+" .............. ",
+" ..  ..      .. ",
+" ..  ..      .. ",
+" ..  ..      .. ",
+" ..  ..      .. ",
+" ..  ..      .. ",
+" ..  ..      .. ",
+" ..  ..      .. ",
+" ..  ..      .. ",
+" ..  ..      .. ",
+" ..  ..      .. ",
+" .............. ",
+" .............. ",
+"                "};
+
+/* XPM */
+static char * add_notebook_xpm[] = {
+"16 16 2 1",
+" 	c None",
+".	c #000000",
+"                ",
+" .............. ",
+" .............. ",
+" ..    ..    .. ",
+" ..    ..    .. ",
+" ..    ..    .. ",
+" ........    .. ",
+" .......     .. ",
+" ..     .    .. ",
+" ..     .    .. ",
+" ..   .....  .. ",
+" ..     .    .. ",
+" ..     .    .. ",
+" .............. ",
+" .............. ",
+"                "};
+
+/* XPM */
+static char * rm_notebook_xpm[] = {
+"16 16 2 1",
+" 	c None",
+".	c #000000",
+"                ",
+" .............. ",
+" .............. ",
+" ..    ..    .. ",
+" ..    ..    .. ",
+" ..    ..    .. ",
+" ........    .. ",
+" .......     .. ",
+" ..          .. ",
+" ..          .. ",
+" ..   .....  .. ",
+" ..          .. ",
+" ..          .. ",
+" .............. ",
+" .............. ",
+"                "};
diff -urN mozilla/embedding/minimo/app/Minimo.cpp mozilla_10LE/embedding/minimo/app/Minimo.cpp
--- mozilla/embedding/minimo/app/Minimo.cpp	2004-02-01 01:22:51.000000000 -0400
+++ mozilla_10LE/embedding/minimo/app/Minimo.cpp	2004-12-23 15:02:52.000000000 -0400
@@ -20,6 +20,16 @@
  *   Doug Turner <[email protected]>  Branched from TestGtkEmbed.cpp
  */
 
+
+/* This file was modified by 10LE Lab
+ * Carlos Aguiar <[email protected]>
+ * Afonso Costa <[email protected]>
+ * Diego Gonzalez <[email protected]>
+ * Joao Leite <[email protected]>
+ * Raoni Novellino <[email protected]>
+ * Claudia Roessing <[email protected]>
+ */
+
 #include "icons.h"
 #include "gtkmozembed.h"
 #include <gtk/gtk.h>
@@ -66,6 +76,20 @@
   GtkWidget  *stopIcon[MINIMO_THROBBER_ICON_MAX];
   GtkWidget  *stopReloadIcon;
 
+/*
+ * Variables which are used in Notebook and Toolbar down
+ */ 
+
+  gboolean    show_tabs;
+  GtkWidget  *notebook;
+  GtkWidget  *label_notebook;
+  GtkWidget  *active_page;
+  GtkWidget  *expander;
+  GtkWidget  *toolbar_down;
+  GtkWidget  *tab_button;
+  GtkWidget  *btaddtab;
+  GtkWidget  *btclosetab;
+  
   const char *statusMessage;
   int         loadPercent;
   int         bytesLoaded;
@@ -150,6 +174,19 @@
 				  MinimoBrowser *browser);
 static gint dom_mouse_out_cb     (GtkMozEmbed *embed, nsIDOMMouseEvent *event,
 				  MinimoBrowser *browser);
+				  
+/*
+ * Insert functions for notebook control
+ */
+ 
+ 
+GtkWidget *get_active_tab (MinimoBrowser *browser);
+void open_new_tab_cb (GtkButton *button, MinimoBrowser *browser);
+void close_current_tab_cb (GtkMenuItem *menuitem, MinimoBrowser *browser);
+void show_hide_tabs_cb (GtkButton *button, MinimoBrowser *browser);
+void switch_page_cb (GtkNotebook *notebook, GtkNotebookPage *page, guint page_num, MinimoBrowser *browser);
+void update_ui (MinimoBrowser *browser);
+
 
 // callbacks from the singleton object
 static void new_window_orphan_cb (GtkMozEmbedSingle *embed,
@@ -202,7 +239,7 @@
   full_path = g_strdup_printf("%s/%s", home_path, ".Minimo");
   
   gtk_moz_embed_set_profile_path(full_path, "Minimo");
-
+  
   MinimoBrowser *browser = new_gtk_browser(GTK_MOZ_EMBED_FLAG_DEFAULTCHROME);
 
   // set our minimum size
@@ -226,7 +263,7 @@
 
   gtk_signal_connect(GTK_OBJECT(single), "new_window_orphan",
 		     GTK_SIGNAL_FUNC(new_window_orphan_cb), NULL);
-
+		     
   gtk_main();
 }
 
@@ -251,6 +288,9 @@
 {
   guint32         actualChromeMask = chromeMask;
   MinimoBrowser *browser = 0;
+  
+  GtkTooltips *tooltips;
+  tooltips = gtk_tooltips_new();
 
   num_browsers++;
 
@@ -315,7 +355,10 @@
   browser->forwardIcon = NewIconFromXPM(browser->toolbar, forward_xpm);
   browser->homeIcon = NewIconFromXPM(browser->toolbar, home_xpm);
   browser->reloadIcon = NewIconFromXPM(browser->toolbar, reload_xpm);
-  
+  browser->tab_button = NewIconFromXPM(browser->toolbar, show_notebook_xpm);
+  browser->btaddtab = NewIconFromXPM(browser->toolbar, add_notebook_xpm);
+  browser->btclosetab = NewIconFromXPM(browser->toolbar, rm_notebook_xpm);
+    
   browser->throbberID  = 0;
   browser->stopIcon[0] = NewIconFromXPM(browser->toolbar, stop_1_xpm);
   browser->stopIcon[1] = NewIconFromXPM(browser->toolbar, stop_2_xpm);
@@ -376,18 +419,42 @@
   g_signal_connect(G_OBJECT(browser->urlEntry), "focus-out-event",
 		   G_CALLBACK(urlEntry_focus_out), browser);
 
+/*
+ * Create the Notebook
+ */
+  
+  browser->notebook = gtk_notebook_new ();
+  gtk_box_pack_start (GTK_BOX (browser->topLevelVBox), browser->notebook, TRUE, TRUE, 0);
+  browser->show_tabs = FALSE;
+  gtk_notebook_set_show_tabs (GTK_NOTEBOOK(browser->notebook), browser->show_tabs);
+  gtk_notebook_set_tab_pos (GTK_NOTEBOOK (browser->notebook), GTK_POS_LEFT);
+  gtk_widget_show (browser->notebook);
+  
   // add it to the hbox
   gtk_box_pack_start(GTK_BOX(browser->toolbarHBox), browser->urlEntry,
 		     TRUE, // expand
 		     TRUE, // fill
 		     0);    // padding
+  
+  
   // create our new gtk moz embed widget
   browser->mozEmbed = gtk_moz_embed_new();
   // add it to the toplevel vbox
-  gtk_box_pack_start(GTK_BOX(browser->topLevelVBox), browser->mozEmbed,
+  /*gtk_box_pack_start(GTK_BOX(browser->topLevelVBox), browser->mozEmbed,
 		     TRUE, // expand
 		     TRUE, // fill
 		     0);   // padding
+  */
+  
+ /*
+  * Create the notebook label
+  */
+ 
+  browser->label_notebook = gtk_label_new ("1");
+  gtk_notebook_append_page (GTK_NOTEBOOK (browser->notebook), browser->mozEmbed, browser->label_notebook);
+  gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (browser->notebook), browser->mozEmbed, FALSE, FALSE, GTK_PACK_START);
+  
+  
   // create the new hbox for the progress area
   browser->progressAreaHBox = gtk_hbox_new(FALSE, 0);
 
@@ -417,6 +484,67 @@
   gtk_widget_set_sensitive(browser->backButton, FALSE);
   gtk_widget_set_sensitive(browser->forwardButton, FALSE);
   
+/*
+ * Create expander area for use toolbar down with notebook buttons
+ */
+  
+  browser->expander = gtk_expander_new (NULL);
+  gtk_widget_show (browser->expander);
+  gtk_box_pack_start (GTK_BOX (browser->topLevelVBox), browser->expander, FALSE, TRUE, 0);
+  
+  browser->toolbar_down = gtk_toolbar_new ();
+  gtk_widget_show (browser->toolbar_down);
+  gtk_container_add (GTK_CONTAINER (browser->expander), browser->toolbar_down);
+  gtk_widget_set_size_request (browser->toolbar_down, -1, 20);
+  gtk_toolbar_set_style (GTK_TOOLBAR (browser->toolbar_down), GTK_TOOLBAR_ICONS);
+  gtk_toolbar_set_show_arrow (GTK_TOOLBAR (browser->toolbar_down), FALSE);
+    
+/*
+ * Show or hide notebooks
+ */
+  
+  browser->tab_button =
+    gtk_toolbar_append_item(GTK_TOOLBAR(browser->toolbar_down),
+			    "Tab Button",
+			    "Show/Hide Tabs",
+			    "Show/Hide Tabs",
+			    browser->tab_button, 
+			    GTK_SIGNAL_FUNC(show_hide_tabs_cb),
+			    browser);
+  
+  gtk_widget_set_size_request (browser->tab_button,16, 16);
+  
+/*
+ * Add new notebook
+ */
+  
+  browser->btaddtab =
+    gtk_toolbar_append_item(GTK_TOOLBAR(browser->toolbar_down),
+			    "Add Tab",
+			    "Add Tab",
+			    "Add Tab",
+			    browser->btaddtab, 
+			    GTK_SIGNAL_FUNC(open_new_tab_cb),
+			    browser);
+  
+  gtk_widget_set_size_request (browser->btaddtab, 16, 16);
+  
+/*
+ * Close active notebook
+ */
+  
+  browser->btclosetab =
+    gtk_toolbar_append_item(GTK_TOOLBAR(browser->toolbar_down),
+			    "Close Tab",
+			    "Close Tab",
+			    "Close Tab",
+			    browser->btclosetab, 
+			    GTK_SIGNAL_FUNC(close_current_tab_cb),
+			    browser);
+  
+  gtk_widget_set_size_request (browser->btclosetab, 16, 16);
+  
+    
   // catch the destruction of the toplevel window
   gtk_signal_connect(GTK_OBJECT(browser->topLevelWindow), "delete_event",
 		     GTK_SIGNAL_FUNC(delete_cb), browser);
@@ -494,10 +622,15 @@
   gtk_signal_connect(GTK_OBJECT(browser->mozEmbed), "destroy",
 		     GTK_SIGNAL_FUNC(destroy_cb), browser);
   
+  /*gtk_signal_connect (GTK_OBJECT (browser->notebook), "switch-page", 
+		     GTK_SIGNAL_FUNC (switch_page_cb), browser);*/
+  
   // set the chrome type so it's stored in the object
   gtk_moz_embed_set_chrome_mask(GTK_MOZ_EMBED(browser->mozEmbed),
 				actualChromeMask);
-
+  
+  browser->active_page = get_active_tab (browser);
+  
   return browser;
 }
 
@@ -552,7 +685,7 @@
 void
 forward_clicked_cb (GtkButton *button, MinimoBrowser *browser)
 {
-  gtk_moz_embed_go_forward(GTK_MOZ_EMBED(browser->mozEmbed));
+  gtk_moz_embed_go_forward (GTK_MOZ_EMBED(browser->mozEmbed));
 }
 
 void
@@ -581,6 +714,7 @@
   num_browsers--;
   tmp_list = g_list_find(browser_list, browser);
   browser_list = g_list_remove_link(browser_list, tmp_list);
+  
   if (browser->tempMessage)
     g_free(browser->tempMessage);
   if (num_browsers == 0)
@@ -952,3 +1086,100 @@
     gtk_widget_set_sensitive(browser->forwardButton, FALSE);
  }
 
+GtkWidget *get_active_tab (MinimoBrowser *browser)
+{
+
+	GtkWidget *active_page;
+	gint current_page;
+	current_page = gtk_notebook_get_current_page (GTK_NOTEBOOK (browser->notebook));
+	active_page = gtk_notebook_get_nth_page (GTK_NOTEBOOK (browser->notebook), current_page);
+	
+	return active_page;
+
+}
+
+void open_new_tab_cb (GtkButton *button, MinimoBrowser *browser)
+{
+
+	GtkWidget *page_label;
+	gint num_pages;
+	gchar *page_title;
+	gint current_page;
+	
+	num_pages = gtk_notebook_get_n_pages (GTK_NOTEBOOK (browser->notebook));
+	sprintf(page_title,"%d",num_pages+1);
+	
+	page_label = gtk_label_new (page_title);
+
+	browser->mozEmbed = gtk_moz_embed_new();
+	gtk_moz_embed_load_url(GTK_MOZ_EMBED(browser->mozEmbed), "about:blank");
+	gtk_editable_delete_text(GTK_EDITABLE (browser->urlEntry), 0, -1);
+	gtk_notebook_append_page (GTK_NOTEBOOK (browser->notebook), browser->mozEmbed, page_label);
+	gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (browser->notebook), browser->mozEmbed, FALSE, FALSE, GTK_PACK_START);
+	gtk_widget_show (browser->mozEmbed);
+
+	current_page = gtk_notebook_page_num (GTK_NOTEBOOK (browser->notebook), browser->mozEmbed);
+	gtk_notebook_set_current_page (GTK_NOTEBOOK (browser->notebook), current_page);
+	browser->active_page = gtk_notebook_get_nth_page (GTK_NOTEBOOK (browser->notebook), current_page);
+	
+	gtk_signal_connect(GTK_OBJECT(browser->active_page), "location",GTK_SIGNAL_FUNC(location_changed_cb), browser);
+	gtk_signal_connect(GTK_OBJECT(browser->active_page), "net_start",GTK_SIGNAL_FUNC(load_started_cb), browser);
+	gtk_signal_connect(GTK_OBJECT(browser->active_page), "net_stop",GTK_SIGNAL_FUNC(load_finished_cb), browser);
+	
+}
+
+void close_current_tab_cb (GtkMenuItem *menuitem, MinimoBrowser *browser)
+{
+	gint current_page, num_pages;
+
+	num_pages = gtk_notebook_get_n_pages (GTK_NOTEBOOK (browser->notebook));
+
+	if (num_pages >1) {
+		current_page = gtk_notebook_get_current_page (GTK_NOTEBOOK (browser->notebook));
+		gtk_notebook_remove_page (GTK_NOTEBOOK (browser->notebook), current_page);
+		num_pages = gtk_notebook_get_n_pages (GTK_NOTEBOOK (browser->notebook));
+		if (num_pages == 1) gtk_notebook_set_show_tabs (GTK_NOTEBOOK (browser->notebook), FALSE);
+	}
+
+}
+
+void switch_page_cb (GtkNotebook *notebook, GtkNotebookPage *page, guint page_num, MinimoBrowser *browser)
+{
+
+	browser->active_page = gtk_notebook_get_nth_page (GTK_NOTEBOOK (browser->notebook), page_num);
+	update_ui (browser);
+
+}
+
+void show_hide_tabs_cb (GtkButton *button, MinimoBrowser *browser)
+{
+
+	if (browser->show_tabs == TRUE) {
+		gtk_notebook_set_show_tabs (GTK_NOTEBOOK(browser->notebook), FALSE);
+		browser->show_tabs = FALSE;
+	}
+	else {
+		gtk_notebook_set_show_tabs (GTK_NOTEBOOK(browser->notebook), TRUE);
+		browser->show_tabs = TRUE;
+	}
+
+}
+
+void update_ui (MinimoBrowser *browser)
+{
+
+	gchar *tmp;
+	int newPosition = 0;
+	int x=0;
+	char *url;
+	
+	tmp = gtk_moz_embed_get_title (GTK_MOZ_EMBED (browser->active_page));
+	
+	if (tmp) x = strlen (tmp);
+	if (x == 0) tmp = "Minimo";
+	gtk_window_set_title (GTK_WINDOW(browser->topLevelWindow), tmp);
+	gtk_editable_delete_text (GTK_EDITABLE (browser->urlEntry), 0, -1);
+	url = gtk_moz_embed_get_location (GTK_MOZ_EMBED (browser->active_page));
+	gtk_editable_insert_text (GTK_EDITABLE (browser->urlEntry), url, strlen (url), &newPosition);
+
+}