~ubuntu-branches/ubuntu/raring/remmina/raring

« back to all changes in this revision

Viewing changes to src/remminaconnectionwindow.c

  • Committer: Bazaar Package Importer
  • Author(s): Luca Falavigna
  • Date: 2010-02-20 19:12:35 UTC
  • mfrom: (1.1.4 upstream)
  • Revision ID: james.westby@ubuntu.com-20100220191235-dqhfi310glnbu6h2
Tags: 0.7.4-1
* New upstream release.
* Bump Standards-Version to 3.8.4, no changes required.

Show diffs side-by-side

added added

removed removed

Lines of Context:
101
101
};
102
102
 
103
103
#define DECLARE_CNNOBJ \
104
 
    if (!cnnhld->cnnwin || gtk_notebook_get_current_page (GTK_NOTEBOOK (cnnhld->cnnwin->priv->notebook)) < 0) return; \
 
104
    if (!cnnhld || !cnnhld->cnnwin || gtk_notebook_get_current_page (GTK_NOTEBOOK (cnnhld->cnnwin->priv->notebook)) < 0) return; \
105
105
    RemminaConnectionObject *cnnobj = (RemminaConnectionObject*) g_object_get_data ( \
106
106
        G_OBJECT (gtk_notebook_get_nth_page (GTK_NOTEBOOK (cnnhld->cnnwin->priv->notebook), \
107
107
        gtk_notebook_get_current_page (GTK_NOTEBOOK (cnnhld->cnnwin->priv->notebook)))), "cnnobj");
108
108
 
109
109
#define DECLARE_CNNOBJ_WITH_RETURN(r) \
110
 
    if (!cnnhld->cnnwin || gtk_notebook_get_current_page (GTK_NOTEBOOK (cnnhld->cnnwin->priv->notebook)) < 0) return r; \
 
110
    if (!cnnhld || !cnnhld->cnnwin || gtk_notebook_get_current_page (GTK_NOTEBOOK (cnnhld->cnnwin->priv->notebook)) < 0) return r; \
111
111
    RemminaConnectionObject *cnnobj = (RemminaConnectionObject*) g_object_get_data ( \
112
112
        G_OBJECT (gtk_notebook_get_nth_page (GTK_NOTEBOOK (cnnhld->cnnwin->priv->notebook), \
113
113
        gtk_notebook_get_current_page (GTK_NOTEBOOK (cnnhld->cnnwin->priv->notebook)))), "cnnobj");
1645
1645
static void
1646
1646
remmina_connection_holder_on_page_added (GtkNotebook *notebook, GtkWidget *child, guint page_num, RemminaConnectionHolder *cnnhld)
1647
1647
{
1648
 
    remmina_connection_holder_update_notebook (cnnhld);
 
1648
    if (gtk_notebook_get_n_pages (GTK_NOTEBOOK (cnnhld->cnnwin->priv->notebook)) <= 0)
 
1649
    {
 
1650
        gtk_widget_destroy (GTK_WIDGET (cnnhld->cnnwin));
 
1651
        g_free (cnnhld);
 
1652
    }
 
1653
    else
 
1654
    {
 
1655
        remmina_connection_holder_update_notebook (cnnhld);
 
1656
    }
1649
1657
}
1650
1658
 
1651
1659
static GtkWidget*
1778
1786
    gtk_widget_show (window);
1779
1787
}
1780
1788
 
 
1789
static RemminaConnectionWindow*
 
1790
remmina_connection_window_find (RemminaFile *remminafile)
 
1791
{
 
1792
    gchar *tag;
 
1793
 
 
1794
    switch (remmina_pref.tab_mode)
 
1795
    {
 
1796
    case REMMINA_TAB_BY_GROUP:
 
1797
        tag = remminafile->group;
 
1798
        break;
 
1799
    case REMMINA_TAB_BY_PROTOCOL:
 
1800
        tag = remminafile->protocol;
 
1801
        break;
 
1802
    case REMMINA_TAB_ALL:
 
1803
        tag = NULL;
 
1804
        break;
 
1805
    case REMMINA_TAB_NONE:
 
1806
    default:
 
1807
        return NULL;
 
1808
    }
 
1809
    return REMMINA_CONNECTION_WINDOW (remmina_widget_pool_find (REMMINA_TYPE_CONNECTION_WINDOW, tag));
 
1810
}
 
1811
 
1781
1812
static void
1782
1813
remmina_connection_object_on_connect (RemminaPlug *gp, RemminaConnectionObject *cnnobj)
1783
1814
{
1784
 
    RemminaConnectionHolder *cnnhld = cnnobj->cnnhld;
 
1815
    RemminaConnectionWindow *cnnwin;
 
1816
    RemminaConnectionHolder *cnnhld;
1785
1817
    GdkScreen *screen;
1786
1818
    GtkWidget *tab;
1787
1819
    gint i;
1788
1820
 
 
1821
    cnnwin = remmina_connection_window_find (cnnobj->remmina_file);
 
1822
 
 
1823
    if (cnnwin)
 
1824
    {
 
1825
        cnnhld = cnnwin->priv->cnnhld;
 
1826
    }
 
1827
    else
 
1828
    {
 
1829
        cnnhld = g_new (RemminaConnectionHolder, 1);
 
1830
        cnnhld->cnnwin = NULL;
 
1831
    }
 
1832
 
 
1833
    cnnobj->cnnhld = cnnhld;
 
1834
 
1789
1835
    screen = gdk_screen_get_default ();
1790
1836
 
1791
1837
    cnnobj->connected = TRUE;
1840
1886
        scale_option_window = NULL;
1841
1887
    }
1842
1888
 
1843
 
    if (remmina_pref.save_view_mode)
 
1889
    if (cnnhld && remmina_pref.save_view_mode)
1844
1890
    {
1845
1891
        if (cnnhld->cnnwin)
1846
1892
        {
1848
1894
        }
1849
1895
        remmina_file_save (cnnobj->remmina_file);
1850
1896
    }
1851
 
    g_free (cnnobj->remmina_file);
 
1897
    remmina_file_free (cnnobj->remmina_file);
1852
1898
 
1853
1899
    if (REMMINA_PLUG (cnnobj->remmina_plug)->has_error)
1854
1900
    {
1866
1912
        cnnobj->window = NULL;
1867
1913
    }
1868
1914
 
1869
 
    if (cnnhld->cnnwin && cnnobj->scrolled_container)
 
1915
    if (cnnhld && cnnhld->cnnwin && cnnobj->scrolled_container)
1870
1916
    {
1871
1917
        gtk_notebook_remove_page (GTK_NOTEBOOK (cnnhld->cnnwin->priv->notebook),
1872
1918
            gtk_notebook_page_num (GTK_NOTEBOOK (cnnhld->cnnwin->priv->notebook), cnnobj->scrolled_container));
1873
 
 
1874
 
        if (gtk_notebook_get_n_pages (GTK_NOTEBOOK (cnnhld->cnnwin->priv->notebook)) <= 0)
1875
 
        {
1876
 
            gtk_widget_destroy (GTK_WIDGET (cnnhld->cnnwin));
1877
 
        }
1878
1919
    }
1879
1920
    g_free (cnnobj);
1880
1921
}
1885
1926
    remmina_connection_holder_check_resize (cnnobj->cnnhld);
1886
1927
}
1887
1928
 
1888
 
static RemminaConnectionWindow*
1889
 
remmina_connection_window_find (RemminaFile *remminafile)
1890
 
{
1891
 
    gchar *tag;
1892
 
 
1893
 
    switch (remmina_pref.tab_mode)
1894
 
    {
1895
 
    case REMMINA_TAB_BY_GROUP:
1896
 
        tag = remminafile->group;
1897
 
        break;
1898
 
    case REMMINA_TAB_BY_PROTOCOL:
1899
 
        tag = remminafile->protocol;
1900
 
        break;
1901
 
    case REMMINA_TAB_ALL:
1902
 
        tag = NULL;
1903
 
        break;
1904
 
    case REMMINA_TAB_NONE:
1905
 
    default:
1906
 
        return NULL;
1907
 
    }
1908
 
    return REMMINA_CONNECTION_WINDOW (remmina_widget_pool_find (REMMINA_TYPE_CONNECTION_WINDOW, tag));
1909
 
}
1910
 
 
1911
1929
gboolean
1912
1930
remmina_connection_window_open_from_filename (const gchar *filename)
1913
1931
{
1934
1952
void
1935
1953
remmina_connection_window_open_from_file (RemminaFile *remminafile)
1936
1954
{
1937
 
    RemminaConnectionWindow *cnnwin;
1938
 
    RemminaConnectionHolder *cnnhld;
1939
1955
    RemminaConnectionObject *cnnobj;
1940
1956
    GdkColor color;
1941
1957
 
1947
1963
        return;
1948
1964
    }
1949
1965
 
1950
 
    cnnwin = remmina_connection_window_find (remminafile);
1951
 
 
1952
1966
    remmina_file_update_screen_resolution (remminafile);
1953
1967
 
1954
 
    if (cnnwin)
1955
 
    {
1956
 
        cnnhld = cnnwin->priv->cnnhld;
1957
 
    }
1958
 
    else
1959
 
    {
1960
 
        cnnhld = g_new (RemminaConnectionHolder, 1);
1961
 
        cnnhld->cnnwin = NULL;
1962
 
    }
1963
 
 
1964
1968
    cnnobj = g_new (RemminaConnectionObject, 1);
1965
 
    cnnobj->cnnhld = cnnhld;
 
1969
    cnnobj->cnnhld = NULL;
1966
1970
    cnnobj->remmina_file = remminafile;
1967
1971
    cnnobj->scrolled_container = NULL;
1968
1972
    cnnobj->connected = FALSE;