erbrowser/src/browser.cpp File Reference

browser - eReader "GtkMozEmbed" widget creation, signal hanlders initialistation and browser related API's More...

#include <liberdm/display.h>
#include "browserTypes.h"
#include "pagebar.h"
#include "indexFileHandler.h"
#include "main.h"
#include "browser.h"
#include "toolbar.h"
#include "displayUpdate.h"
#include "browserLog.h"
#include <libermanifest/ermanifest.h>
#include "mozilla_api.h"
#include <signal.h>
#include <sys/types.h>
#include <sys/stat.h>
#include "prenv.h"
#include "mozEmbedCallbacks.h"

Go to the source code of this file.

Classes

class  CPersist

Functions

gboolean delete_cb (GtkWidget *widget, GdkEventAny *event, Ereader *reader)
gboolean browser_main_window_expose_event (GtkWidget *widget, GdkEventExpose *event, Ereader *reader)
static void browser_create (Ereader *browser, gchar *URL_input)
static GtkWidget * create_window (char *title)
static void maximize_window (GtkWidget *src)
Ereadernew_gtk_ereader (char *manifest, char *input_URL)
void browser_quit ()
void destroy_ereader (Ereader *theEreader)
void set_browser_visibility (Ereader *browser, gboolean visibility)

Variables

static CPersist s_recorder


Detailed Description

browser - eReader "GtkMozEmbed" widget creation, signal hanlders initialistation and browser related API's

<File description>="">

Definition in file browser.cpp.


Function Documentation

static void browser_create ( Ereader browser,
gchar *  URL_input 
) [static]

create a "GtkMozEmbed" widget, specify the callbacks of the GtkMozEmbed specific signals and load the first XHTML file

Parameters:
URL location of the first file that needs to be displayed
Returns:
void

Definition at line 403 of file browser.cpp.

00404 {
00405     browser->mozEmbed = gtk_moz_embed_new();
00406 
00407 
00408     
00409     // add this to the browser window
00410     gtk_container_add(GTK_CONTAINER(browser->eventBox), browser->mozEmbed);
00411 
00412     BR_LOGPRINTF("browser 0x%x - created mozEmbed 0x%x", browser, browser->mozEmbed);
00413 
00414     g_signal_connect(GTK_OBJECT(browser->mozEmbed), "location", G_CALLBACK(location_changed_cb), browser);
00415     g_signal_connect(GTK_OBJECT(browser->mozEmbed), "visibility", G_CALLBACK(visibility_cb), browser);
00416     g_signal_connect(GTK_OBJECT(browser->mozEmbed), "net_stop", G_CALLBACK(load_finished_cb), browser);
00417     //g_signal_connect(GTK_OBJECT(browser->mozEmbed), "progress", G_CALLBACK(progress_change_cb), browser);
00418     //g_signal_connect(GTK_OBJECT(browser->mozEmbed), "progress_all", G_CALLBACK(progress_all), browser);
00419     //g_signal_connect(GTK_OBJECT(browser->mozEmbed), "status_change", G_CALLBACK(status_change_cb), browser);
00420     //g_signal_connect(GTK_OBJECT(browser->mozEmbed), "net_state", G_CALLBACK(net_state_change_cb), browser);
00421     g_signal_connect(GTK_OBJECT(browser->mozEmbed), "open_uri", G_CALLBACK(open_uri_cb), browser);
00422 
00423 #ifndef PC_ENVIRONMENT
00424     // set the chrome type so it's stored in the object
00425     // commented for scrollbars fixing
00426     gtk_moz_embed_set_chrome_mask(GTK_MOZ_EMBED(browser->mozEmbed), GTK_MOZ_EMBED_FLAG_DEFAULTCHROME);
00427 #endif
00428     // set our minimum size 
00429     gtk_widget_set_size_request(browser->mozEmbed, SCREEN_WIDTH, CLIENT_AREA);
00430 
00431     if (URL_input)
00432     {
00433         BR_LOGPRINTF("loading URL %s", URL_input);
00434 
00435         // => only request a refresh when the page is loaded
00436         display_update_increase_level(MOZEMBED_UPDATE_LEVEL);
00437 
00438         gtk_moz_embed_load_url(GTK_MOZ_EMBED(browser->mozEmbed), URL_input);
00439     }
00440     else
00441     {
00442         BR_ERRORPRINTF("No default URL available");
00443     }
00444 
00445     BR_LOGPRINTF("show mozEmbed 0x%x", browser->mozEmbed);
00446     set_browser_visibility(browser, TRUE);
00447 }

Here is the call graph for this function:

gboolean browser_main_window_expose_event ( GtkWidget *  widget,
GdkEventExpose *  event,
Ereader reader 
)

Definition at line 504 of file browser.cpp.

00505 {
00506     BR_DISPLAYPRINTF("entry");
00507     display_update_request_screen_refresh(MAIN_WINDOW_EXPOSE_LEVEL, NULL);
00508     return FALSE;
00509 }

Here is the call graph for this function:

void browser_quit (  ) 

Definition at line 343 of file browser.cpp.

Here is the call graph for this function:

static GtkWidget * create_window ( char *  title  )  [static]

Definition at line 489 of file browser.cpp.

00490 {
00491     GtkWidget *window;
00492 
00493     window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
00494     gtk_window_set_title(GTK_WINDOW(window), (title));
00495     gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
00496     gtk_container_set_border_width(GTK_CONTAINER(window), 0);
00497         gtk_widget_set_size_request(GTK_WIDGET(window), SCREEN_WIDTH, SCREEN_HEIGHT - TOOLBAR_HEIGTH - PAGEBAR_HEIGHT);
00498     gtk_window_set_modal(GTK_WINDOW(window), FALSE);
00499     gtk_window_set_resizable(GTK_WINDOW(window), FALSE);
00500     gtk_signal_connect(GTK_OBJECT(window), "realize", GTK_SIGNAL_FUNC(maximize_window), NULL);
00501     return window;
00502 }

Here is the call graph for this function:

gboolean delete_cb ( GtkWidget *  widget,
GdkEventAny *  event,
Ereader reader 
)

Definition at line 386 of file browser.cpp.

00387 {
00388     BR_LOGPRINTF("entry");
00389     destroy_ereader(reader);
00390     gtk_widget_destroy(widget);
00391     return TRUE;
00392 }

Here is the call graph for this function:

void destroy_ereader ( Ereader theEreader  ) 

clear resources used by the Ereader data structure

Parameters:
theEreader reference to the eReader struct
Returns:
void

Definition at line 349 of file browser.cpp.

00350 {
00351     // store url lastest visited
00352     gchar  *    type = NULL;
00353     gboolean    page_type_known = FALSE;
00354     int         page = -1;
00355                 
00356         // current url 
00357     gchar  *url = gtk_moz_embed_get_location(GTK_MOZ_EMBED(theEreader->mozEmbed));
00358        
00359     // get type so that we can get page number
00360     if (page_type_known = mozilla_get_page_type(GTK_MOZ_EMBED(theEreader->mozEmbed), &type))
00361     {
00362         page = index_file_get_page_number(&theEreader->pageStatus->index, type, url);
00363     }
00364     BR_LOGPRINTF("url last visited %s %d page\n", url, page);
00365     s_recorder.StorePageLastRead(url);
00366     if (url) 
00367     {
00368         free(url);
00369     }
00370     
00371     if (theEreader)
00372     {
00373         BR_LOGPRINTF("cleaning up browser allocations");
00374 
00375         if (theEreader->pageStatus)
00376         {
00377             browser_destroy_page_status(theEreader->pageStatus);
00378         }
00379 
00380         g_free(theEreader);
00381         theEreader = NULL;
00382     }
00383 }

Here is the call graph for this function:

static void maximize_window ( GtkWidget *  src  )  [static]

Definition at line 464 of file browser.cpp.

00465 {
00466 #ifndef PC_ENVIRONMENT
00467 #ifndef LOCAL_DISPLAY
00468 //      GdkBitmap       *empty_bitmap;
00469 //      GdkCursor *cursor;
00470 //      GdkColor useless;
00471 //      char invisible_cursor_bits[] = {0x0};
00472 
00473     /* set transparent cursor */
00474 //      useless.red = 0;
00475 //      useless.green = 0;
00476 //      useless.blue = 0;
00477 //      useless.pixel = 0;
00478 //      empty_bitmap = gdk_bitmap_create_from_data(src->window,invisible_cursor_bits,1,1);
00479 //      cursor = gdk_cursor_new_from_pixmap(empty_bitmap,empty_bitmap,&useless,&useless,0,0);
00480 //      gdk_window_set_cursor(src->window,cursor);
00481 
00482     /* no borders, buttons, ... */
00483 //      gdk_window_set_decorations(src->window,GdkWMDecoration(0));
00484 #endif //LOCAL_DISPLAY
00485 #endif //PC_ENVIRONMENT
00486 }

Ereader* new_gtk_ereader ( char *  manifest,
char *  input_URL 
)

Allocate an Ereader data structure, creates the ereader browser specific GTK widgets and initializes the embedded browser window

Parameters:
Manifest File location
URL location of the first file that needs to be displayed
Returns:
reference to Ereader structure indicates success

Definition at line 266 of file browser.cpp.

00267 {
00268     Ereader *theEreader;
00269 
00270     BR_LOGPRINTF("entry");
00271 
00272     // create one Ereader ereader struct and fill it with zeros
00273     theEreader = g_new0(Ereader, 1);
00274 
00275     if (theEreader)
00276     {
00277         theEreader->pageStatus = browser_create_page_status();
00278         browser_set_page_status_indexfile(theEreader->pageStatus, manifest);
00279 
00280         BR_LOGPRINTF("theEreader 0x%x - theEreader->pageStatus 0x%x", theEreader, theEreader->pageStatus);
00281 
00282         theEreader->topLevelWindow = create_window("E-reader");
00283 
00284         // new vbox - homogenous - zero spacing
00285         theEreader->topLevelVBox = gtk_vbox_new(FALSE, 0);
00286         gtk_widget_show(theEreader->topLevelVBox);
00287         gtk_container_add(GTK_CONTAINER(theEreader->topLevelWindow), theEreader->topLevelVBox);
00288 
00289         // event box addded to have an actual X-window     
00290         theEreader->eventBox = gtk_event_box_new();
00291         gtk_box_pack_start(GTK_BOX(theEreader->topLevelVBox), theEreader->eventBox, TRUE, TRUE, 0);
00292         gtk_widget_show(theEreader->eventBox);
00293 
00294         g_signal_connect(G_OBJECT(theEreader->topLevelVBox), "expose-event", G_CALLBACK(browser_main_window_expose_event), theEreader);
00295 
00296 
00297 #ifdef LOCAL_DISPLAY
00298         // create toolbar empty area 
00299         BR_WARNPRINTF("LOCAL_DISPLAY is defined => toolbar");
00300 
00301         theEreader->toolbar = gtk_toolbar_new();
00302         gtk_widget_set_usize(GTK_WIDGET(theEreader->toolbar), (-1), TOOLBAR_HEIGTH);
00303         gtk_widget_show(theEreader->toolbar);
00304 
00305         gtk_box_pack_start(GTK_BOX(theEreader->topLevelVBox), GTK_WIDGET(theEreader->toolbar), FALSE, // expand
00306                            FALSE, // fill
00307                            0);  // padding
00308 #endif //LOCAL_DISPLAY
00309 
00310         gtk_widget_show(theEreader->topLevelWindow);
00311 
00312         // check manifest file
00313         s_recorder.SetManifestPathName(manifest);
00314         
00315         char *url = s_recorder.GetPageLastRead(input_URL);
00316         if (url)
00317         {
00318             input_URL = url;
00319             // input_URL = "file:///./pagl01.html";
00320         }
00321                 
00322         // create the embedded browser
00323         browser_create(theEreader, input_URL);
00324 
00325         // catch the destruction of the toplevel window
00326         g_signal_connect(GTK_OBJECT(theEreader->topLevelWindow), "delete_event", G_CALLBACK(delete_cb), theEreader);
00327 
00328         // catch the key-events in the toplevel window
00329         gtk_signal_connect(GTK_OBJECT(theEreader->topLevelWindow), "key_press_event", G_CALLBACK(on_mainWindow_keypress), theEreader);
00330         
00331         // init 
00332         s_recorder.InstallTermHandler();
00333         s_recorder.SetBrowser(theEreader);
00334     }
00335     else
00336     {
00337         BR_ERRORPRINTF("unable to allocate gEreader");
00338     }
00339 
00340     return theEreader;
00341 }

Here is the call graph for this function:

void set_browser_visibility ( Ereader browser,
gboolean  visibility 
)

show/hide the Mozembed widget

Parameters:
theEreader reference to the eReader struct
visibility 
Returns:
void

Definition at line 449 of file browser.cpp.

00450 {
00451     BR_LOGPRINTF("%s", (visibility == TRUE) ? "TRUE" : "FALSE");
00452 
00453     if (!visibility)
00454     {
00455         gtk_widget_hide(browser->mozEmbed);
00456     }
00457     else
00458     {
00459         gtk_widget_show(browser->mozEmbed);
00460         gtk_widget_grab_focus(browser->mozEmbed);
00461     }
00462 }


Variable Documentation

CPersist s_recorder [static]

Definition at line 254 of file browser.cpp.


Generated on Sun Dec 14 17:14:46 2008 by  doxygen 1.5.6