~midori/midori/trunk

« back to all changes in this revision

Viewing changes to midori/main.c

  • Committer: Christian Dywan
  • Date: 2008-11-18 01:07:53 UTC
  • Revision ID: git-v1:3cd50f419b55c8ac81d557ddf5764f78bffd75ff
Introduce a C extension interface

Show diffs side-by-side

added added

removed removed

Lines of Context:
19
19
#include "midori-websettings.h"
20
20
#include "midori-browser.h"
21
21
#include "midori-stock.h"
 
22
#include "midori-extension.h"
22
23
 
23
24
#include "sokoke.h"
24
25
#include "gjs.h"
1033
1034
                         G_CALLBACK (midori_browser_session_cb), session, NULL);
1034
1035
}
1035
1036
 
1036
 
gboolean
1037
 
midori_view_single_process (gboolean enable);
1038
 
 
1039
1037
int
1040
1038
main (int    argc,
1041
1039
      char** argv)
1322
1320
                       "history", history,
1323
1321
                       NULL);
1324
1322
 
 
1323
    /* Load extensions */
 
1324
    gchar* extension_path;
 
1325
    GDir* extension_dir;
 
1326
    const gchar* filename;
 
1327
 
 
1328
    extension_path = g_build_filename (LIBDIR, PACKAGE_NAME, NULL);
 
1329
    if (g_module_supported ())
 
1330
        extension_dir = g_dir_open (extension_path, 0, NULL);
 
1331
    else
 
1332
        extension_dir = NULL;
 
1333
    if (extension_dir)
 
1334
    {
 
1335
        while ((filename = g_dir_read_name (extension_dir)))
 
1336
        {
 
1337
            gchar* fullname;
 
1338
            GModule* module;
 
1339
            typedef MidoriExtension* (*extension_main_func)(MidoriApp* app);
 
1340
            extension_main_func extension_main;
 
1341
 
 
1342
            fullname = g_build_filename (extension_path, filename, NULL);
 
1343
            module = g_module_open (fullname, G_MODULE_BIND_LOCAL);
 
1344
            g_free (fullname);
 
1345
            if (!module)
 
1346
            {
 
1347
                g_warning ("%s", g_module_error ());
 
1348
                continue;
 
1349
            }
 
1350
            ;
 
1351
            if (!g_module_symbol (module, "extension_main",
 
1352
                             (gpointer) &extension_main))
 
1353
            {
 
1354
                g_warning ("%s", g_module_error ());
 
1355
                continue;
 
1356
            }
 
1357
            extension_main (app);
 
1358
        }
 
1359
        g_dir_close (extension_dir);
 
1360
    }
 
1361
 
1325
1362
    browser = g_object_new (MIDORI_TYPE_BROWSER,
1326
1363
                            "settings", settings,
1327
1364
                            "bookmarks", bookmarks,
1354
1391
    g_object_weak_ref (G_OBJECT (session),
1355
1392
        (GWeakNotify)(midori_browser_weak_notify_cb), browser);
1356
1393
 
1357
 
    /* Load extensions */
1358
 
    js_context = gjs_global_context_new ();
1359
 
    /* FIXME: We want to honor system installed addons as well */
1360
 
    gchar* addon_path = g_build_filename (g_get_user_data_dir (), PACKAGE_NAME,
1361
 
                                          "extensions", NULL);
1362
 
    GDir* addon_dir = g_dir_open (addon_path, 0, NULL);
1363
 
    if (addon_dir)
1364
 
    {
1365
 
        const gchar* filename;
1366
 
        while ((filename = g_dir_read_name (addon_dir)))
1367
 
        {
1368
 
            if (!g_str_has_prefix (filename, ".midori.js"))
1369
 
                continue;
1370
 
 
1371
 
            gchar* fullname = g_build_filename (addon_path, filename, NULL);
1372
 
            exception = NULL;
1373
 
            gjs_script_from_file (js_context, fullname, &exception);
1374
 
            if (exception)
1375
 
            /* FIXME: Do we want to print this somewhere else? */
1376
 
            /* FIXME Convert the filename to UTF8 */
1377
 
                printf ("%s - Exception: %s\n", filename, exception);
1378
 
            g_free (fullname);
1379
 
        }
1380
 
        g_dir_close (addon_dir);
1381
 
    }
1382
 
 
1383
1394
    gtk_main ();
1384
1395
 
1385
 
    JSGlobalContextRelease (js_context);
1386
 
 
1387
1396
    /* Save configuration files */
1388
1397
    config_path = g_build_filename (g_get_user_config_dir (), PACKAGE_NAME,
1389
1398
                                    NULL);