~ubuntu-branches/ubuntu/hardy/mplayerplug-in/hardy

« back to all changes in this revision

Viewing changes to Source/plugin.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Adrien Cunin
  • Date: 2007-05-21 21:16:39 UTC
  • mfrom: (1.1.8 upstream)
  • Revision ID: james.westby@ubuntu.com-20070521211639-szqlzo6izljq9xa4
Tags: 3.40-4ubuntu1
* Merge from Debian unstable. Remaining Ubuntu changes:
   - debian/{control,mozilla-mplayer.links}: s/iceweasel/firefox/
   - debian/control: s/iceape/mozilla/
   - debian/mozilla-mplayer.links: removed mozilla->iceape symlinks
* Modify Maintainer value to match Debian-Maintainer-Field Spec

Show diffs side-by-side

added added

removed removed

Lines of Context:
126
126
        new nsPluginInstance(aCreateDataStruct->instance);
127
127
 
128
128
    New(plugin, aCreateDataStruct);
 
129
 
 
130
    // This line makes the plugin "windowless"
 
131
    // problem is there is no window now to draw too
 
132
    // Also according to 
 
133
    // http://devedge-temp.mozilla.org/library/manuals/2002/plugin/1.0/drawevent.html
 
134
    // X can't do windowless plugins, but that is old
 
135
    // NPN_SetValue(aCreateDataStruct->instance,NPPVpluginWindowBool, FALSE);
129
136
    return plugin;
130
137
}
131
138
 
167
174
    window_height = 0;
168
175
    embed_width = 0;
169
176
    embed_height = 0;
170
 
    movie_width = 0;
171
 
    movie_height = 0;
 
177
    movie_width = 1;
 
178
    movie_height = 1;
172
179
    setwindow = 0;
173
180
    baseurl = NULL;
174
181
    hostname = NULL;
233
240
    targetplayer = 0;
234
241
    hidestatus = 0;
235
242
    enablecontextmenu = 1;
 
243
    dontparent = 0;
 
244
    volume = -1;
236
245
 
237
246
#ifdef GTK_ENABLED
238
247
    image = NULL;
244
253
    stop_event_box = NULL;
245
254
    ff_event_box = NULL;
246
255
    rew_event_box = NULL;
 
256
    vol_event_box = NULL;
 
257
    vol_tooltip = NULL;
247
258
    fs_event_box = NULL;
248
259
    src_event_box = NULL;
249
260
    gtkwidget = NULL;
288
299
    download_dir = strdup(getenv("HOME"));
289
300
    cachesize = 512;
290
301
    output_display = NULL;
291
 
    osdlevel = 0;
 
302
    osdlevel = 1;
292
303
    qt_speed = SPEED_MED;
293
304
    cache_percent = 25;
294
305
    framedrop = 0;
295
306
    autosync = 0;
296
307
    mc = 0;
 
308
    softvol = 1;
297
309
    useragent = NULL;
298
310
    enable_smil = 1;
299
311
    enable_helix = 1;
306
318
    enable_ogg = 1;
307
319
    enable_midi = 0;
308
320
    enable_pls = 1;
 
321
    tv_driver = NULL;
 
322
    tv_input = NULL;
 
323
    tv_width = 0;
 
324
    tv_height = 0;
 
325
    tv_outfmt = NULL;
 
326
    profile = NULL;
309
327
 
310
328
    // JavaScript
311
329
    paused = 0;
404
422
    if (threadsetup == 1) {
405
423
 
406
424
        if (threadlaunched == 1) {
407
 
        
 
425
 
408
426
            // switch to non blocking mode
409
427
            if (player != NULL) {
410
428
                flags = fcntl(fileno(player), F_GETFL, 0);
411
429
                flags |= O_NONBLOCK;
412
430
                fcntl(fileno(player), F_SETFL, flags);
413
431
            }
414
 
        
 
432
 
415
433
            pthread_mutex_lock(&control_mutex);
416
434
            if (paused == 1) {
417
435
                sendCommand(this, "pause\n");
579
597
        output_display = NULL;
580
598
    }
581
599
 
 
600
    if (tv_driver != NULL) {
 
601
        free(tv_driver);
 
602
        tv_driver = NULL;
 
603
    }
 
604
 
 
605
    if (tv_input != NULL) {
 
606
        free(tv_input);
 
607
        tv_input = NULL;
 
608
 
 
609
    }
 
610
 
 
611
    if (tv_outfmt != NULL) {
 
612
        free(tv_outfmt);
 
613
        tv_outfmt = NULL;
 
614
    }
 
615
 
 
616
    if (profile != NULL) {
 
617
        free(profile);
 
618
        profile = NULL;
 
619
    }
 
620
 
 
621
 
582
622
    nQtNext = 0;
583
623
    for (i = 0; i < 256; i++) {
584
624
        if (qtNext[i] != NULL)
585
625
            free(qtNext[i]);
586
626
        qtNext[i] = NULL;
 
627
 
587
628
    }
588
629
 
589
630
    if (download_dir != NULL) {
749
790
        gtkplug = gtk_plug_new(window);
750
791
 
751
792
        if (targetplayer == 0) {
752
 
            gtkwidget = gtk_window_new(GTK_WINDOW_POPUP);
 
793
            if (dontparent == 0) {
 
794
                gtkwidget = gtk_window_new(GTK_WINDOW_POPUP);
 
795
            } else {
 
796
                gtkwidget = gtk_window_new(GTK_WINDOW_TOPLEVEL);
 
797
            }
753
798
        } else {
754
799
            gtkwidget = gtk_window_new(GTK_WINDOW_TOPLEVEL);
755
800
            button_window = gtk_window_new(GTK_WINDOW_POPUP);
860
905
#endif
861
906
 
862
907
#ifdef GTK2_ENABLED
863
 
        if (enablecontextmenu != 0) {
 
908
        if (enablecontextmenu != 0) {
864
909
            g_signal_connect_swapped(G_OBJECT(gtkwidget),
865
910
                                     "button_press_event",
866
911
                                     G_CALLBACK(popup_handler),
949
994
        gtk_container_add(GTK_CONTAINER(fixed_event_box), fixed_container);
950
995
 
951
996
        status = GTK_LABEL(gtk_label_new(_("Initializing")));
 
997
        // I don't really like this as it messes up the right click menu
 
998
        // gtk_label_set_selectable(status,TRUE);
952
999
        progress_bar = GTK_PROGRESS_BAR(gtk_progress_bar_new());
953
1000
 
954
1001
        if (window_height > 125) {
986
1033
            gtk_fixed_put(GTK_FIXED(fixed_container), GTK_WIDGET(status),
987
1034
                          10, 60);
988
1035
        } else {
989
 
            if (window_height < 20) {
990
 
                if (window_width < 126) {
991
 
                    gtk_fixed_put(GTK_FIXED(fixed_container),
992
 
                                  GTK_WIDGET(status), 65, 0);
993
 
                } else {
994
 
                    gtk_fixed_put(GTK_FIXED(fixed_container),
995
 
                                  GTK_WIDGET(status), 105, 0);
996
 
                }
997
 
            } else {
998
 
                gtk_fixed_put(GTK_FIXED(fixed_container),
999
 
                              GTK_WIDGET(status), 10, 10);
1000
 
            }
 
1036
            // small window layout
 
1037
            gtk_fixed_put(GTK_FIXED(fixed_container),
 
1038
                          GTK_WIDGET(status), 0, 0);
1001
1039
            gtk_fixed_put(GTK_FIXED(fixed_container),
1002
1040
                          GTK_WIDGET(progress_bar), 10,
1003
 
                          window_height - 20);
 
1041
                          window_height - 31);
1004
1042
            if (!hidestatus)
1005
1043
                gtk_widget_show(GTK_WIDGET(progress_bar));
1006
1044
#ifdef GTK2_ENABLED
1007
1045
            gtk_widget_set_size_request(GTK_WIDGET(progress_bar),
1008
1046
                                        window_width - 20, 15);
1009
1047
            gtk_widget_set_size_request(GTK_WIDGET(status),
1010
 
                                        window_width - 20,
1011
 
                                        window_height - 25);
 
1048
                                        window_width,
 
1049
                                        window_height - 31);
1012
1050
#endif
1013
1051
#ifdef GTK1_ENABLED
1014
 
            if (DEBUG > 1)
1015
 
                printf("< 125 setup\n");
1016
1052
            gtk_widget_set_usize(GTK_WIDGET(progress_bar),
1017
1053
                                 aWindow->width - 20, 15);
1018
1054
            gtk_widget_set_usize(GTK_WIDGET(status),
1019
 
                                 aWindow->width - 20,
1020
 
                                 aWindow->height - 25);
 
1055
                                 aWindow->width,
 
1056
                                 aWindow->height - 31);
1021
1057
#endif
1022
1058
        }
1023
1059
 
1031
1067
            gtk_fixed_put(GTK_FIXED(fixed_container),
1032
1068
                          drawing_area, 10, 100);
1033
1069
        }
 
1070
        gtk_widget_set_usize(drawing_area, 1, 1);
1034
1071
        gtk_widget_show(drawing_area);
1035
1072
 
1036
1073
 
1069
1106
#ifdef GTK_ENABLED
1070
1107
 
1071
1108
        if (targetplayer == 0) {
1072
 
            XReparentWindow(GDK_WINDOW_XDISPLAY(gtkwidget->window),
1073
 
                            GDK_WINDOW_XWINDOW(gtkwidget->window), window,
1074
 
                            0, 0);
1075
 
            gtk_widget_map(gtkwidget);
 
1109
            if (dontparent == 0) {
 
1110
                XReparentWindow(GDK_WINDOW_XDISPLAY(gtkwidget->window),
 
1111
                                GDK_WINDOW_XWINDOW(gtkwidget->window),
 
1112
                                window, 0, 0);
 
1113
                gtk_widget_map(gtkwidget);
 
1114
            }
1076
1115
        } else {
1077
1116
            gtk_widget_show(button_window);
1078
1117
            XReparentWindow(GDK_WINDOW_XDISPLAY(button_window->window),
1222
1261
 
1223
1262
                gtk_widget_set_usize(GTK_WIDGET(mediaprogress_bar),
1224
1263
                                     window_width -
1225
 
                                     (width * (multiplier + 1) + 20),
 
1264
                                     (width * (multiplier + 2) + 20),
1226
1265
                                     height - 4);
1227
1266
            }
1228
1267
            gtk_fixed_move(GTK_FIXED(fixed_container),
 
1268
                           GTK_WIDGET(vol_event_box),
 
1269
                           (window_width - (width * 2)),
 
1270
                           window_height - height);
 
1271
            gtk_fixed_move(GTK_FIXED(fixed_container),
1229
1272
                           GTK_WIDGET(fs_event_box),
1230
1273
                           (window_width - width), window_height - height);
1231
1274
 
1233
1276
        if (progress_bar != NULL) {
1234
1277
            gtk_fixed_move(GTK_FIXED(fixed_container),
1235
1278
                           GTK_WIDGET(progress_bar),
1236
 
                           10, window_height - 50);
 
1279
                           10, window_height - 31);
1237
1280
 
1238
1281
            gtk_widget_set_usize(GTK_WIDGET(progress_bar),
1239
1282
                                 window_width - 20, 15);
1240
1283
        }
1241
1284
 
 
1285
        if (GTK_IS_WIDGET(drawing_area) && (movie_width > 0)
 
1286
            && (movie_height > 0) && mode == NP_EMBED) {
 
1287
            if (showcontrols) {
 
1288
                gtk_widget_set_usize(GTK_WIDGET(drawing_area),
 
1289
                                     window_width, window_height - 16);
 
1290
            } else {
 
1291
                gtk_widget_set_usize(GTK_WIDGET(drawing_area),
 
1292
                                     window_width, window_height);
 
1293
            }
 
1294
        }
 
1295
 
1242
1296
    }
1243
1297
    if (gtkwidget == NULL)
1244
1298
        return NPERR_NO_ERROR;
1333
1387
            n->retrieved = 1;
1334
1388
#ifdef GTK_ENABLED
1335
1389
            g_idle_add(gtkgui_save_enable, this);
1336
 
#endif  
 
1390
#endif
1337
1391
            if (n->localcache != NULL) {
1338
1392
                if (fclose(n->localcache) != 0) {
1339
1393
                    if (DEBUG)
1665
1719
    }
1666
1720
 
1667
1721
    // redirect case on initial node
1668
 
    if ( n == NULL ) {
1669
 
        if (DEBUG)
 
1722
    if (n == NULL) {
 
1723
        if (DEBUG)
1670
1724
            printf("n == NULL\n");
1671
 
        if (td->list != NULL) {
 
1725
        if (td->list != NULL) {
1672
1726
            if (DEBUG)
1673
1727
                printf("td->list != NULL\n");
1674
 
            if (((strlen(td->list->fname) == 0) 
1675
 
                  || (strncmp(getURLFilename(td->list->url),getURLFilename(stream->url),1024) == 0))
1676
 
                  && (mmsstream == 0)) {
1677
 
                    if (DEBUG)
1678
 
                        printf("Redirected initial URL\n");
1679
 
                    n = list;
1680
 
                    snprintf(n->url, 1024, "%s", stream->url);
 
1728
            if (((strlen(td->list->fname) == 0)
 
1729
                 ||
 
1730
                 (strncmp
 
1731
                  (getURLFilename(td->list->url),
 
1732
                   getURLFilename(stream->url), 1024) == 0))
 
1733
                && (mmsstream == 0)) {
 
1734
                if (DEBUG)
 
1735
                    printf("Redirected initial URL\n");
 
1736
                n = list;
 
1737
                snprintf(n->url, 1024, "%s", stream->url);
1681
1738
            }
1682
 
        }
 
1739
        }
1683
1740
    }
1684
1741
 
1685
1742
 
1743
1800
                    if (strstr(mimetype, "audio/x-mod") != NULL) {
1744
1801
                        strlcat(n->fname, ".mod", 1024);
1745
1802
                    }
 
1803
                    if (strstr(mimetype, "flac") != NULL) {
 
1804
                        strlcat(n->fname, ".flac", 1024);
 
1805
                    }
 
1806
 
1746
1807
                }
1747
 
            
 
1808
 
1748
1809
                if (DEBUG)
1749
1810
                    printf("WR tempname: %s\n", n->fname);
1750
1811
 
1788
1849
            if (keep_download == 1) {
1789
1850
                n->remove = 0;
1790
1851
                filename = getURLFilename(n->url);
1791
 
                snprintf(n->fname, 1024, "%s/%s",
1792
 
                         download_dir, filename);
 
1852
                snprintf(n->fname, 1024, "%s/%s", download_dir, filename);
1793
1853
                if (filename)
1794
1854
                    NPN_MemFree(filename);
1795
1855
            } else {
1929
1989
                                 _("Buffering Complete - %li KB"),
1930
1990
                                 (n->bytes / 1024));
1931
1991
                        percent = 1.0;
1932
 
                        n->retrieved = 1;
 
1992
                        n->retrieved = 1;
1933
1993
                    }
1934
1994
                }
1935
1995
                if (mode == NP_EMBED && noembed == 0 && fullscreen == 0) {
2143
2203
        if (DEBUG > 1)
2144
2204
            printf("Play: ready to signal\n");
2145
2205
        while (state < STATE_WAITING_FOR_SIGNAL) {
2146
 
            printf("sleeping state = %i\n", state);
 
2206
            if (DEBUG > 1)
 
2207
                printf("sleeping state = %i\n", state);
2147
2208
            usleep(100);
2148
2209
        }
2149
2210
        if (DEBUG > 1)
2315
2376
 
2316
2377
}
2317
2378
 
 
2379
void nsPluginInstance::VolumeUp()
 
2380
{
 
2381
    char command[32];
 
2382
 
 
2383
    if (threadlaunched == 0)
 
2384
        return;
 
2385
    pthread_mutex_lock(&control_mutex);
 
2386
    snprintf(command, 32, "volume +1\n");
 
2387
    sendCommand(this, command);
 
2388
    sendCommand(this, "get_property volume\n");
 
2389
    pthread_mutex_unlock(&control_mutex);
 
2390
 
 
2391
}
 
2392
 
 
2393
void nsPluginInstance::VolumeDown()
 
2394
{
 
2395
    char command[32];
 
2396
 
 
2397
    if (threadlaunched == 0)
 
2398
        return;
 
2399
    pthread_mutex_lock(&control_mutex);
 
2400
    snprintf(command, 32, "volume -1\n");
 
2401
    sendCommand(this, command);
 
2402
    sendCommand(this, "get_property volume\n");
 
2403
    pthread_mutex_unlock(&control_mutex);
 
2404
 
 
2405
}
 
2406
 
 
2407
void nsPluginInstance::GetVolume(double *_retval)
 
2408
{
 
2409
    *_retval = (double) volume;
 
2410
 
 
2411
}
 
2412
 
 
2413
void nsPluginInstance::SetVolume(double value)
 
2414
{
 
2415
    volume = (int) value;
 
2416
    char command[32];
 
2417
 
 
2418
    if (threadlaunched == 0)
 
2419
        return;
 
2420
    pthread_mutex_lock(&control_mutex);
 
2421
    snprintf(command, 32, "volume %i 1\n", volume);
 
2422
    sendCommand(this, command);
 
2423
    pthread_mutex_unlock(&control_mutex);
 
2424
}
 
2425
 
2318
2426
void nsPluginInstance::GetPlayState(PRInt32 * playstate)
2319
2427
{
2320
2428
    pthread_mutex_lock(&control_mutex);
2466
2574
                gtk_widget_show(rew_event_box);
2467
2575
            if (mediaprogress_bar != NULL && mediaPercent > 0)
2468
2576
                gtk_widget_show(GTK_WIDGET(mediaprogress_bar));
 
2577
            if (vol_event_box != NULL)
 
2578
                gtk_widget_show(GTK_WIDGET(vol_event_box));
2469
2579
            if (fs_event_box != NULL)
2470
2580
                gtk_widget_show(GTK_WIDGET(fs_event_box));
2471
2581
        }
2488
2598
                gtk_widget_hide(rew_event_box);
2489
2599
            if (mediaprogress_bar != NULL)
2490
2600
                gtk_widget_hide(GTK_WIDGET(mediaprogress_bar));
 
2601
            if (vol_event_box != NULL)
 
2602
                gtk_widget_hide(GTK_WIDGET(vol_event_box));
2491
2603
            if (fs_event_box != NULL)
2492
2604
                gtk_widget_hide(GTK_WIDGET(fs_event_box));
2493
2605
        }
2576
2688
            gtk_window_get_size(GTK_WINDOW(gtkwidget), &wwidth, &wheight);
2577
2689
            if ((wwidth != rect.width) && (wheight != rect.height)) {
2578
2690
                if (targetplayer == 0) {
2579
 
                    XReparentWindow(GDK_WINDOW_XDISPLAY(gtkwidget->window),
2580
 
                                    GDK_WINDOW_XWINDOW(gtkwidget->window),
2581
 
                                    GDK_WINDOW_XWINDOW(fs_window->window),
2582
 
                                    0, 0);
2583
 
 
2584
 
                    gtk_widget_map(gtkwidget);
2585
 
 
2586
 
                    gtk_window_resize(GTK_WINDOW(gtkwidget), rect.width,
2587
 
                                      rect.height);
2588
 
                    if (DEBUG)
2589
 
                        printf("gtkwidget resized to %i x %i\n",
2590
 
                               rect.width, rect.height);
 
2691
                    if (dontparent == 0) {
 
2692
                        XReparentWindow(GDK_WINDOW_XDISPLAY
 
2693
                                        (gtkwidget->window),
 
2694
                                        GDK_WINDOW_XWINDOW(gtkwidget->
 
2695
                                                           window),
 
2696
                                        GDK_WINDOW_XWINDOW(fs_window->
 
2697
                                                           window), 0, 0);
 
2698
 
 
2699
                        gtk_widget_map(gtkwidget);
 
2700
 
 
2701
                        gtk_window_resize(GTK_WINDOW(gtkwidget),
 
2702
                                          rect.width, rect.height);
 
2703
                        if (DEBUG)
 
2704
                            printf("gtkwidget resized to %i x %i\n",
 
2705
                                   rect.width, rect.height);
 
2706
                    }
2591
2707
                }
2592
2708
            } else {
2593
2709
                if (DEBUG)
2633
2749
            if (fs_window != NULL) {
2634
2750
                gtk_window_unfullscreen(GTK_WINDOW(fs_window));
2635
2751
                if (targetplayer == 0) {
2636
 
                    XReparentWindow(GDK_WINDOW_XDISPLAY(gtkwidget->window),
2637
 
                                    GDK_WINDOW_XWINDOW(gtkwidget->window),
2638
 
                                    window, 0, 0);
2639
 
                    gtk_widget_map(gtkwidget);
 
2752
                    if (dontparent == 0) {
 
2753
                        XReparentWindow(GDK_WINDOW_XDISPLAY
 
2754
                                        (gtkwidget->window),
 
2755
                                        GDK_WINDOW_XWINDOW(gtkwidget->
 
2756
                                                           window), window,
 
2757
                                        0, 0);
 
2758
                        gtk_widget_map(gtkwidget);
 
2759
                    }
2640
2760
                }
2641
2761
                gtk_widget_destroy(fs_window);
2642
2762
                fs_window = NULL;
2704
2824
                                   button_top + 2);
2705
2825
                    gtk_widget_set_usize(GTK_WIDGET(mediaprogress_bar),
2706
2826
                                         win_width -
2707
 
                                         (width * (multiplier + 1) + 20),
 
2827
                                         (width * (multiplier + 2) + 20),
2708
2828
                                         height - 4);
2709
2829
                }
2710
 
                if (win_width > 126)
 
2830
                if (win_width > 126) {
 
2831
                    gtk_fixed_move(GTK_FIXED(fixed_container),
 
2832
                                   GTK_WIDGET(vol_event_box),
 
2833
                                   (win_width - (width * 2)), button_top);
2711
2834
                    gtk_fixed_move(GTK_FIXED(fixed_container),
2712
2835
                                   GTK_WIDGET(fs_event_box),
2713
2836
                                   (win_width - width), button_top);
2714
 
 
 
2837
                }
2715
2838
 
2716
2839
            }
2717
2840
 
2815
2938
 
2816
2939
                gtk_widget_show(fs_window);
2817
2940
                gtk_window_fullscreen(GTK_WINDOW(fs_window));
2818
 
                gtk_widget_reparent(gtkwidget, fs_window);
 
2941
                //gtk_widget_reparent(gtkwidget, fs_window);
2819
2942
                XReparentWindow(GDK_WINDOW_XDISPLAY(gtkwidget->window),
2820
2943
                                GDK_WINDOW_XWINDOW(gtkwidget->window),
2821
2944
                                GDK_WINDOW_XWINDOW(fs_window->window), 0,
2907
3030
                                   y - height + 2);
2908
3031
 
2909
3032
                    gtk_widget_set_usize(GTK_WIDGET(mediaprogress_bar),
2910
 
                                         x - (width * (multiplier + 1) +
 
3033
                                         x - (width * (multiplier + 2) +
2911
3034
                                              20), height - 4);
2912
3035
                }
2913
3036
                gtk_fixed_move(GTK_FIXED(fixed_container),
 
3037
                               GTK_WIDGET(vol_event_box),
 
3038
                               (x - (width * 2)), y - height);
 
3039
                gtk_fixed_move(GTK_FIXED(fixed_container),
2914
3040
                               GTK_WIDGET(fs_event_box),
2915
3041
                               (x - width), y - height);
2916
3042
 
3061
3187
            tail = tail->next;
3062
3188
    }
3063
3189
    fullyQualifyURL(this, (char *) item, localurl);
3064
 
    addToList(this, localurl, tail, -1);
 
3190
    addToList(this, localurl, tail, -1, 0, -1,0);
3065
3191
    pthread_mutex_unlock(&playlist_mutex);
3066
3192
}
3067
3193