gnucash maint: Multiple changes pushed
Geert Janssens
gjanssens at code.gnucash.org
Tue Sep 2 09:29:16 EDT 2014
Updated via https://github.com/Gnucash/gnucash/commit/87654e69 (commit)
via https://github.com/Gnucash/gnucash/commit/ac1990fc (commit)
via https://github.com/Gnucash/gnucash/commit/61cd3f11 (commit)
via https://github.com/Gnucash/gnucash/commit/904afd8b (commit)
via https://github.com/Gnucash/gnucash/commit/0a394c5b (commit)
from https://github.com/Gnucash/gnucash/commit/8d9b3c7c (commit)
commit 87654e69f6ed4e13ffacce4348ccd2e814832636
Author: Geert Janssens <janssens-geert at telenet.be>
Date: Tue Sep 2 14:50:32 2014 +0200
Bug 434462 - register color don't work correct with system theme color - Part 2
This commit fixes this for (business) entry ledgers.
diff --git a/src/business/business-ledger/gncEntryLedger.h b/src/business/business-ledger/gncEntryLedger.h
index a8668df..3a7532d 100644
--- a/src/business/business-ledger/gncEntryLedger.h
+++ b/src/business/business-ledger/gncEntryLedger.h
@@ -49,17 +49,6 @@ typedef enum
GNCENTRY_NUM_REGISTER_TYPES
} GncEntryLedgerType;
-typedef struct entry_ledger_colors
-{
- guint32 header_bg_color;
-
- guint32 primary_bg_color;
- guint32 secondary_bg_color;
-
- guint32 primary_active_bg_color;
- guint32 secondary_active_bg_color;
-} GncEntryLedgerColors;
-
#define ENTRY_IACCT_CELL "inv-account"
#define ENTRY_BACCT_CELL "bill-account"
#define ENTRY_ACTN_CELL "action"
diff --git a/src/business/business-ledger/gncEntryLedgerModel.c b/src/business/business-ledger/gncEntryLedgerModel.c
index 96a0dca..87b8991 100644
--- a/src/business/business-ledger/gncEntryLedgerModel.c
+++ b/src/business/business-ledger/gncEntryLedgerModel.c
@@ -36,15 +36,6 @@
#include "gncEntryLedgerP.h"
#include "gncEntryLedgerModel.h"
-static GncEntryLedgerColors reg_colors =
-{
- 0x96B183,
- 0xBFDEB9,
- 0xF6FFDA,
-
- 0xFFEF98,
- 0xFFEF98,
-};
/** Private Interfaces ***********************************************/
@@ -927,42 +918,84 @@ static CellIOFlags get_qty_io_flags (VirtualLocation virt_loc, gpointer user_dat
/* GET BG_COLORS */
static guint32
-gnc_entry_ledger_get_bg_color (VirtualLocation virt_loc,
- gboolean *hatching, gpointer user_data)
+gnc_entry_ledger_get_color_internal (VirtualLocation virt_loc,
+ GncEntryLedger *ledger,
+ const guint32 *color_table,
+ gboolean foreground)
{
- GncEntryLedger *ledger = user_data;
+ const char *cursor_name;
VirtualCell *vcell;
- guint32 bg_color;
gboolean is_current;
+ guint32 colorbase = 0; /* By default return background colors */
- if (hatching)
- *hatching = FALSE;
-
- bg_color = 0xffffff; /* white */
+ if (foreground)
+ colorbase = COLOR_UNKNOWN_FG; /* a bit of enum arithmetic */
- if (!ledger) return bg_color;
+ if (!ledger)
+ return color_table[colorbase + COLOR_UNKNOWN_BG];
if (gnc_table_virtual_location_in_header (ledger->table, virt_loc))
- return reg_colors.header_bg_color;
+ return color_table[colorbase + COLOR_HEADER_BG];
vcell = gnc_table_get_virtual_cell (ledger->table, virt_loc.vcell_loc);
if (!vcell || !vcell->cellblock)
- return bg_color;
+ return color_table[colorbase + COLOR_UNKNOWN_BG];
if ((virt_loc.phys_col_offset < vcell->cellblock->start_col) ||
(virt_loc.phys_col_offset > vcell->cellblock->stop_col))
- return bg_color;
+ return color_table[colorbase + COLOR_UNKNOWN_BG];
- is_current = virt_cell_loc_equal
- (ledger->table->current_cursor_loc.vcell_loc, virt_loc.vcell_loc);
+ is_current = virt_cell_loc_equal (ledger->table->current_cursor_loc.vcell_loc,
+ virt_loc.vcell_loc);
if (is_current)
return vcell->start_primary_color ?
- reg_colors.primary_active_bg_color :
- reg_colors.secondary_active_bg_color;
+ color_table[colorbase + COLOR_PRIMARY_BG_ACTIVE] :
+ color_table[colorbase + COLOR_SECONDARY_BG_ACTIVE];
return vcell->start_primary_color ?
- reg_colors.primary_bg_color : reg_colors.secondary_bg_color;
+ color_table[colorbase + COLOR_PRIMARY_BG] : color_table[colorbase + COLOR_SECONDARY_BG];
+
+}
+
+static guint32
+gnc_entry_ledger_get_fg_color (VirtualLocation virt_loc,
+ gpointer user_data)
+{
+ GncEntryLedger *ledger = user_data;
+ return gnc_entry_ledger_get_color_internal (virt_loc, ledger, reg_colors_default, TRUE);
+}
+
+static guint32
+gnc_entry_ledger_get_gtkrc_fg_color (VirtualLocation virt_loc,
+ gpointer user_data)
+{
+ GncEntryLedger *ledger = user_data;
+ return gnc_entry_ledger_get_color_internal (virt_loc, ledger, reg_colors_gtkrc, TRUE);
+}
+
+static guint32
+gnc_entry_ledger_get_bg_color (VirtualLocation virt_loc,
+ gboolean *hatching, gpointer user_data)
+{
+ GncEntryLedger *ledger = user_data;
+
+ if (hatching)
+ *hatching = FALSE;
+
+ return gnc_entry_ledger_get_color_internal (virt_loc, ledger, reg_colors_default, FALSE);
+}
+
+static guint32
+gnc_entry_ledger_get_gtkrc_bg_color (VirtualLocation virt_loc,
+ gboolean *hatching, gpointer user_data)
+{
+ GncEntryLedger *ledger = user_data;
+
+ if (hatching)
+ *hatching = FALSE;
+
+ return gnc_entry_ledger_get_color_internal (virt_loc, ledger, reg_colors_gtkrc, FALSE);
}
/* SAVE CELLS */
@@ -1214,9 +1247,18 @@ static void gnc_entry_ledger_model_new_handlers (TableModel *model,
};
unsigned int i;
+ gnc_table_model_set_default_fg_color_handler
+ (model, gnc_entry_ledger_get_fg_color);
+
+ gnc_table_model_set_fg_color_handler
+ (model, gnc_entry_ledger_get_gtkrc_fg_color, "gtkrc");
+
gnc_table_model_set_default_bg_color_handler
(model, gnc_entry_ledger_get_bg_color);
+ gnc_table_model_set_bg_color_handler
+ (model, gnc_entry_ledger_get_gtkrc_bg_color, "gtkrc");
+
for (i = 0; i < (sizeof(models) / sizeof(*models)); i++)
{
diff --git a/src/register/ledger-core/split-register-model.c b/src/register/ledger-core/split-register-model.c
index 4ef9333..253dcac 100644
--- a/src/register/ledger-core/split-register-model.c
+++ b/src/register/ledger-core/split-register-model.c
@@ -39,66 +39,6 @@
#include "split-register-p.h"
#include "engine-helpers.h"
-
-typedef enum
-{
- COLOR_TABLE_DEFAULT,
- COLOR_TABLE_GTKRC,
-} SplitRegisterColorTable;
-
-/* Alternative color tables to use for the register.
- * The colors in this array are ordered according to the RegisterColor Enum
- * Be careful to respect this order !
- */
-static const guint32 reg_colors_default [] =
-{
- 0xFFFFFF, // COLOR_UNKNOWN_BG
- 0x96B183, // COLOR_HEADER_BG
- 0xBFDEB9, // COLOR_PRIMARY_BG
- 0xFFEF98, // COLOR_PRIMARY_BG_ACTIVE
- 0xF6FFDA, // COLOR_SECONDARY_BG
- 0xFFEF98, // COLOR_SECONDARY_BG_ACTIVE
- 0xEDE7D3, // COLOR_SPLIT_BG
- 0xFFEF98, // COLOR_SPLIT_BG_ACTIVE
-
- 0x000000, // COLOR_UNKNOWN_FG
- 0x000000, // COLOR_HEADER_FG
- 0x000000, // COLOR_PRIMARY_FG
- 0x000000, // COLOR_PRIMARY_FG_ACTIVE
- 0x000000, // COLOR_SECONDARY_FG
- 0x000000, // COLOR_SECONDARY_FG_ACTIVE
- 0x000000, // COLOR_SPLIT_FG
- 0x000000, // COLOR_SPLIT_FG_ACTIVE
-
- 0xFF0000, // COLOR_NEGATIVE
-};
-
-/* The colors in this array are ordered according to the RegisterColor Enum
- * Be careful to respect this order !
- */
-static const guint32 reg_colors_gtkrc [] =
-{
- COLOR_UNKNOWN_BG, // COLOR_UNKNOWN_BG
- COLOR_HEADER_BG, // COLOR_HEADER_BG
- COLOR_PRIMARY_BG, // COLOR_PRIMARY_BG
- COLOR_PRIMARY_BG_ACTIVE, // COLOR_PRIMARY_BG_ACTIVE
- COLOR_SECONDARY_BG, // COLOR_SECONDARY_BG
- COLOR_SECONDARY_BG_ACTIVE, // COLOR_SECONDARY_BG_ACTIVE
- COLOR_SPLIT_BG, // COLOR_SPLIT_BG
- COLOR_SPLIT_BG_ACTIVE, // COLOR_SPLIT_BG_ACTIVE
-
- COLOR_UNKNOWN_FG, // COLOR_UNKNOWN_FG
- COLOR_HEADER_FG, // COLOR_HEADER_FG
- COLOR_PRIMARY_FG, // COLOR_PRIMARY_FG
- COLOR_PRIMARY_FG_ACTIVE, // COLOR_PRIMARY_FG_ACTIVE
- COLOR_SECONDARY_FG, // COLOR_SECONDARY_FG
- COLOR_SECONDARY_FG_ACTIVE, // COLOR_SECONDARY_FG_ACTIVE
- COLOR_SPLIT_FG, // COLOR_SPLIT_FG
- COLOR_SPLIT_FG_ACTIVE, // COLOR_SPLIT_FG_ACTIVE
-
- COLOR_NEGATIVE, // COLOR_NEGATIVE
-};
-
/* This static indicates the debugging module that this .o belongs to. */
static QofLogModule log_module = GNC_MOD_LEDGER;
diff --git a/src/register/ledger-core/split-register-model.h b/src/register/ledger-core/split-register-model.h
index fc9b0df..1f264c4 100644
--- a/src/register/ledger-core/split-register-model.h
+++ b/src/register/ledger-core/split-register-model.h
@@ -28,33 +28,4 @@
TableModel * gnc_split_register_model_new (void);
TableModel * gnc_template_register_model_new (void);
-typedef enum
-{
- /* Colors used for background drawing */
- COLOR_UNKNOWN_BG,
- COLOR_HEADER_BG,
- COLOR_PRIMARY_BG,
- COLOR_PRIMARY_BG_ACTIVE,
- COLOR_SECONDARY_BG,
- COLOR_SECONDARY_BG_ACTIVE,
- COLOR_SPLIT_BG,
- COLOR_SPLIT_BG_ACTIVE,
-
- /* Colors used for foreground drawing (text etc)
- * ATTENTION: the background and foreground lists should have
- * the same types (the same amount of entries) !
- * The code relies on this ! */
- COLOR_UNKNOWN_FG,
- COLOR_HEADER_FG,
- COLOR_PRIMARY_FG,
- COLOR_PRIMARY_FG_ACTIVE,
- COLOR_SECONDARY_FG,
- COLOR_SECONDARY_FG_ACTIVE,
- COLOR_SPLIT_FG,
- COLOR_SPLIT_FG_ACTIVE,
-
- /* Other colors */
- COLOR_NEGATIVE, /* Color to use for negative numbers */
-} RegisterColor;
-
#endif
diff --git a/src/register/register-core/table-allgui.h b/src/register/register-core/table-allgui.h
index 5fe7a91..2738738 100644
--- a/src/register/register-core/table-allgui.h
+++ b/src/register/register-core/table-allgui.h
@@ -156,6 +156,92 @@ struct table
gpointer ui_data;
};
+/** Color definitions used for table elements */
+typedef enum
+{
+ /* Colors used for background drawing */
+ COLOR_UNKNOWN_BG,
+ COLOR_HEADER_BG,
+ COLOR_PRIMARY_BG,
+ COLOR_PRIMARY_BG_ACTIVE,
+ COLOR_SECONDARY_BG,
+ COLOR_SECONDARY_BG_ACTIVE,
+ COLOR_SPLIT_BG,
+ COLOR_SPLIT_BG_ACTIVE,
+
+ /* Colors used for foreground drawing (text etc)
+ * ATTENTION: the background and foreground lists should have
+ * the same types (the same amount of entries) !
+ * The code relies on this ! */
+ COLOR_UNKNOWN_FG,
+ COLOR_HEADER_FG,
+ COLOR_PRIMARY_FG,
+ COLOR_PRIMARY_FG_ACTIVE,
+ COLOR_SECONDARY_FG,
+ COLOR_SECONDARY_FG_ACTIVE,
+ COLOR_SPLIT_FG,
+ COLOR_SPLIT_FG_ACTIVE,
+
+ /* Other colors */
+ COLOR_NEGATIVE, /* Color to use for negative numbers */
+} RegisterColor;
+
+
+
+
+/* Alternative color tables to use for the register.
+ * The colors in this array are ordered according to the RegisterColor Enum
+ * Be careful to respect this order !
+ */
+static const guint32 reg_colors_default [] =
+{
+ 0xFFFFFF, // COLOR_UNKNOWN_BG
+ 0x96B183, // COLOR_HEADER_BG
+ 0xBFDEB9, // COLOR_PRIMARY_BG
+ 0xFFEF98, // COLOR_PRIMARY_BG_ACTIVE
+ 0xF6FFDA, // COLOR_SECONDARY_BG
+ 0xFFEF98, // COLOR_SECONDARY_BG_ACTIVE
+ 0xEDE7D3, // COLOR_SPLIT_BG
+ 0xFFEF98, // COLOR_SPLIT_BG_ACTIVE
+
+ 0x000000, // COLOR_UNKNOWN_FG
+ 0x000000, // COLOR_HEADER_FG
+ 0x000000, // COLOR_PRIMARY_FG
+ 0x000000, // COLOR_PRIMARY_FG_ACTIVE
+ 0x000000, // COLOR_SECONDARY_FG
+ 0x000000, // COLOR_SECONDARY_FG_ACTIVE
+ 0x000000, // COLOR_SPLIT_FG
+ 0x000000, // COLOR_SPLIT_FG_ACTIVE
+
+ 0xFF0000, // COLOR_NEGATIVE
+};
+
+/* The colors in this array are ordered according to the RegisterColor Enum
+ * Be careful to respect this order !
+ */
+static const guint32 reg_colors_gtkrc [] =
+{
+ COLOR_UNKNOWN_BG, // COLOR_UNKNOWN_BG
+ COLOR_HEADER_BG, // COLOR_HEADER_BG
+ COLOR_PRIMARY_BG, // COLOR_PRIMARY_BG
+ COLOR_PRIMARY_BG_ACTIVE, // COLOR_PRIMARY_BG_ACTIVE
+ COLOR_SECONDARY_BG, // COLOR_SECONDARY_BG
+ COLOR_SECONDARY_BG_ACTIVE, // COLOR_SECONDARY_BG_ACTIVE
+ COLOR_SPLIT_BG, // COLOR_SPLIT_BG
+ COLOR_SPLIT_BG_ACTIVE, // COLOR_SPLIT_BG_ACTIVE
+
+ COLOR_UNKNOWN_FG, // COLOR_UNKNOWN_FG
+ COLOR_HEADER_FG, // COLOR_HEADER_FG
+ COLOR_PRIMARY_FG, // COLOR_PRIMARY_FG
+ COLOR_PRIMARY_FG_ACTIVE, // COLOR_PRIMARY_FG_ACTIVE
+ COLOR_SECONDARY_FG, // COLOR_SECONDARY_FG
+ COLOR_SECONDARY_FG_ACTIVE, // COLOR_SECONDARY_FG_ACTIVE
+ COLOR_SPLIT_FG, // COLOR_SPLIT_FG
+ COLOR_SPLIT_FG_ACTIVE, // COLOR_SPLIT_FG_ACTIVE
+
+ COLOR_NEGATIVE, // COLOR_NEGATIVE
+};
+
/* Set the default gui handlers used by new tables. */
void gnc_table_set_default_gui_handlers (TableGUIHandlers *gui_handlers);
commit ac1990fc9d0f67beb03a8e132c65031d20a0138d
Author: Geert Janssens <janssens-geert at telenet.be>
Date: Sat Aug 30 17:39:49 2014 +0200
Bug 434462 - register color don't work correct with system theme color - Part 1
This commit fixes this for ordinary registers. Entry ledgers (business) aren't handled yet.
diff --git a/src/register/ledger-core/split-register-model.c b/src/register/ledger-core/split-register-model.c
index af029da..4ef9333 100644
--- a/src/register/ledger-core/split-register-model.c
+++ b/src/register/ledger-core/split-register-model.c
@@ -60,6 +60,17 @@ static const guint32 reg_colors_default [] =
0xFFEF98, // COLOR_SECONDARY_BG_ACTIVE
0xEDE7D3, // COLOR_SPLIT_BG
0xFFEF98, // COLOR_SPLIT_BG_ACTIVE
+
+ 0x000000, // COLOR_UNKNOWN_FG
+ 0x000000, // COLOR_HEADER_FG
+ 0x000000, // COLOR_PRIMARY_FG
+ 0x000000, // COLOR_PRIMARY_FG_ACTIVE
+ 0x000000, // COLOR_SECONDARY_FG
+ 0x000000, // COLOR_SECONDARY_FG_ACTIVE
+ 0x000000, // COLOR_SPLIT_FG
+ 0x000000, // COLOR_SPLIT_FG_ACTIVE
+
+ 0xFF0000, // COLOR_NEGATIVE
};
/* The colors in this array are ordered according to the RegisterColor Enum
@@ -75,6 +86,17 @@ static const guint32 reg_colors_gtkrc [] =
COLOR_SECONDARY_BG_ACTIVE, // COLOR_SECONDARY_BG_ACTIVE
COLOR_SPLIT_BG, // COLOR_SPLIT_BG
COLOR_SPLIT_BG_ACTIVE, // COLOR_SPLIT_BG_ACTIVE
+
+ COLOR_UNKNOWN_FG, // COLOR_UNKNOWN_FG
+ COLOR_HEADER_FG, // COLOR_HEADER_FG
+ COLOR_PRIMARY_FG, // COLOR_PRIMARY_FG
+ COLOR_PRIMARY_FG_ACTIVE, // COLOR_PRIMARY_FG_ACTIVE
+ COLOR_SECONDARY_FG, // COLOR_SECONDARY_FG
+ COLOR_SECONDARY_FG_ACTIVE, // COLOR_SECONDARY_FG_ACTIVE
+ COLOR_SPLIT_FG, // COLOR_SPLIT_FG
+ COLOR_SPLIT_FG_ACTIVE, // COLOR_SPLIT_FG_ACTIVE
+
+ COLOR_NEGATIVE, // COLOR_NEGATIVE
};
/* This static indicates the debugging module that this .o belongs to. */
@@ -539,84 +561,33 @@ get_trans_total_balance (SplitRegister *reg, Transaction *trans)
}
static guint32
-gnc_split_register_get_fg_color (VirtualLocation virt_loc,
- gpointer user_data)
-{
- SplitRegister *reg = user_data;
- const guint32 black = 0x000000;
- const guint32 red = 0xff0000;
- const char * cell_name;
- gboolean is_current;
- gnc_numeric value;
- Split *split;
-
- if (!use_red_for_negative)
- return black;
-
- split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
- if (!split)
- return black;
-
- cell_name = gnc_table_get_cell_name (reg->table, virt_loc);
-
- if (gnc_cell_name_equal (cell_name, TSHRS_CELL))
- value = get_trans_total_amount (reg, xaccSplitGetParent (split));
- else if (gnc_cell_name_equal (cell_name, SHRS_CELL))
- {
- if (virt_cell_loc_equal (reg->table->current_cursor_loc.vcell_loc,
- virt_loc.vcell_loc))
- value = gnc_price_cell_get_value
- ((PriceCell *) gnc_table_layout_get_cell (reg->table->layout,
- SHRS_CELL));
- else
- value = xaccSplitGetAmount (split);
- }
- else if (gnc_cell_name_equal (cell_name, BALN_CELL))
- value = xaccSplitGetBalance (split);
- else if (gnc_cell_name_equal (cell_name, RBALN_CELL))
- value = gnc_split_register_get_rbaln (virt_loc, user_data, TRUE);
- else if (gnc_cell_name_equal (cell_name, TBALN_CELL))
- value = get_trans_total_balance (reg, xaccSplitGetParent (split));
-
- if ((gnc_cell_name_equal (cell_name, BALN_CELL)) ||
- (gnc_cell_name_equal (cell_name, RBALN_CELL)) ||
- (gnc_cell_name_equal (cell_name, TBALN_CELL)))
- {
- Account *account = xaccSplitGetAccount (split);
- if (gnc_reverse_balance (account))
- value = gnc_numeric_neg (value);
- }
-
- if (gnc_numeric_negative_p (value))
- return red;
-
- return black;
-}
-
-static guint32
-gnc_split_register_get_bg_color_internal (VirtualLocation virt_loc,
- SplitRegister *reg,
- const guint32 *color_table,
- guint32 default_color)
+gnc_split_register_get_color_internal (VirtualLocation virt_loc,
+ SplitRegister *reg,
+ const guint32 *color_table,
+ gboolean foreground)
{
const char *cursor_name;
VirtualCell *vcell;
gboolean is_current;
gboolean double_alternate_virt;
+ guint32 colorbase = 0; /* By default return background colors */
+
+ if (foreground)
+ colorbase = COLOR_UNKNOWN_FG; /* a bit of enum arithmetic */
if (!reg)
- return default_color;
+ return color_table[colorbase + COLOR_UNKNOWN_BG];
if (gnc_table_virtual_location_in_header (reg->table, virt_loc))
- return color_table[COLOR_HEADER_BG];
+ return color_table[colorbase + COLOR_HEADER_BG];
vcell = gnc_table_get_virtual_cell (reg->table, virt_loc.vcell_loc);
if (!vcell || !vcell->cellblock)
- return default_color;
+ return color_table[colorbase + COLOR_UNKNOWN_BG];
if ((virt_loc.phys_col_offset < vcell->cellblock->start_col) ||
(virt_loc.phys_col_offset > vcell->cellblock->stop_col))
- return default_color;
+ return color_table[colorbase + COLOR_UNKNOWN_BG];
is_current = virt_cell_loc_equal (reg->table->current_cursor_loc.vcell_loc,
virt_loc.vcell_loc);
@@ -628,11 +599,11 @@ gnc_split_register_get_bg_color_internal (VirtualLocation virt_loc,
{
if (is_current)
return vcell->start_primary_color ?
- color_table[COLOR_PRIMARY_BG_ACTIVE] :
- color_table[COLOR_SECONDARY_BG_ACTIVE];
+ color_table[colorbase + COLOR_PRIMARY_BG_ACTIVE] :
+ color_table[colorbase + COLOR_SECONDARY_BG_ACTIVE];
return vcell->start_primary_color ?
- color_table[COLOR_PRIMARY_BG] : color_table[COLOR_SECONDARY_BG];
+ color_table[colorbase + COLOR_PRIMARY_BG] : color_table[colorbase + COLOR_SECONDARY_BG];
}
if (g_strcmp0 (cursor_name, CURSOR_DOUBLE_JOURNAL) == 0 ||
@@ -646,35 +617,108 @@ gnc_split_register_get_bg_color_internal (VirtualLocation virt_loc,
{
if (double_alternate_virt)
return vcell->start_primary_color ?
- color_table[COLOR_PRIMARY_BG_ACTIVE] :
- color_table[COLOR_SECONDARY_BG_ACTIVE];
+ color_table[colorbase + COLOR_PRIMARY_BG_ACTIVE] :
+ color_table[colorbase + COLOR_SECONDARY_BG_ACTIVE];
return (virt_loc.phys_row_offset % 2 == 0) ?
- color_table[COLOR_PRIMARY_BG_ACTIVE] :
- color_table[COLOR_SECONDARY_BG_ACTIVE];
+ color_table[colorbase + COLOR_PRIMARY_BG_ACTIVE] :
+ color_table[colorbase + COLOR_SECONDARY_BG_ACTIVE];
}
if (double_alternate_virt)
return vcell->start_primary_color ?
- color_table[COLOR_PRIMARY_BG] :
- color_table[COLOR_SECONDARY_BG];
+ color_table[colorbase + COLOR_PRIMARY_BG] :
+ color_table[colorbase + COLOR_SECONDARY_BG];
return (virt_loc.phys_row_offset % 2 == 0) ?
- color_table[COLOR_PRIMARY_BG] :
- color_table[COLOR_SECONDARY_BG];
+ color_table[colorbase + COLOR_PRIMARY_BG] :
+ color_table[colorbase + COLOR_SECONDARY_BG];
}
if (g_strcmp0 (cursor_name, CURSOR_SPLIT) == 0)
{
if (is_current)
- return color_table[COLOR_SPLIT_BG_ACTIVE];
+ return color_table[colorbase + COLOR_SPLIT_BG_ACTIVE];
- return color_table[COLOR_SPLIT_BG];
+ return color_table[colorbase + COLOR_SPLIT_BG];
}
PWARN ("Unexpected cursor: %s\n", cursor_name);
- return default_color;
+ return color_table[colorbase + COLOR_UNKNOWN_BG];
+}
+
+static guint32
+gnc_split_register_get_fg_color_internal (VirtualLocation virt_loc,
+ SplitRegister *reg,
+ const guint32 *color_table)
+{
+ const guint32 red_color = color_table[COLOR_NEGATIVE];
+ guint32 fg_color;
+ const char * cell_name;
+ gboolean is_current;
+ gnc_numeric value;
+ Split *split;
+
+ fg_color = gnc_split_register_get_color_internal (virt_loc, reg, color_table, TRUE);
+
+ if (!use_red_for_negative)
+ return fg_color;
+
+ split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
+ if (!split)
+ return fg_color;
+
+ cell_name = gnc_table_get_cell_name (reg->table, virt_loc);
+
+ if (gnc_cell_name_equal (cell_name, TSHRS_CELL))
+ value = get_trans_total_amount (reg, xaccSplitGetParent (split));
+ else if (gnc_cell_name_equal (cell_name, SHRS_CELL))
+ {
+ if (virt_cell_loc_equal (reg->table->current_cursor_loc.vcell_loc,
+ virt_loc.vcell_loc))
+ value = gnc_price_cell_get_value
+ ((PriceCell *) gnc_table_layout_get_cell (reg->table->layout,
+ SHRS_CELL));
+ else
+ value = xaccSplitGetAmount (split);
+ }
+ else if (gnc_cell_name_equal (cell_name, BALN_CELL))
+ value = xaccSplitGetBalance (split);
+ else if (gnc_cell_name_equal (cell_name, RBALN_CELL))
+ value = gnc_split_register_get_rbaln (virt_loc, reg, TRUE);
+ else if (gnc_cell_name_equal (cell_name, TBALN_CELL))
+ value = get_trans_total_balance (reg, xaccSplitGetParent (split));
+
+ if ((gnc_cell_name_equal (cell_name, BALN_CELL)) ||
+ (gnc_cell_name_equal (cell_name, RBALN_CELL)) ||
+ (gnc_cell_name_equal (cell_name, TBALN_CELL)))
+ {
+ Account *account = xaccSplitGetAccount (split);
+ if (gnc_reverse_balance (account))
+ value = gnc_numeric_neg (value);
+ }
+
+ if (gnc_numeric_negative_p (value))
+ return red_color;
+
+ return fg_color;
+}
+
+static guint32
+gnc_split_register_get_fg_color (VirtualLocation virt_loc,
+ gpointer user_data)
+{
+ SplitRegister *reg = user_data;
+ return gnc_split_register_get_fg_color_internal (virt_loc, reg, reg_colors_default);
+}
+
+static guint32
+gnc_split_register_get_gtkrc_fg_color (VirtualLocation virt_loc,
+ gpointer user_data)
+{
+ SplitRegister *reg = user_data;
+ return gnc_split_register_get_fg_color_internal (virt_loc, reg, reg_colors_gtkrc);
}
static guint32
@@ -687,7 +731,7 @@ gnc_split_register_get_bg_color (VirtualLocation virt_loc,
if (hatching)
*hatching = FALSE;
- return gnc_split_register_get_bg_color_internal (virt_loc, reg, reg_colors_default, 0xffffff);
+ return gnc_split_register_get_color_internal (virt_loc, reg, reg_colors_default, FALSE);
}
@@ -701,7 +745,7 @@ gnc_split_register_get_gtkrc_bg_color (VirtualLocation virt_loc,
if (hatching)
*hatching = FALSE;
- return gnc_split_register_get_bg_color_internal (virt_loc, reg, reg_colors_gtkrc, COLOR_UNKNOWN_BG);
+ return gnc_split_register_get_color_internal (virt_loc, reg, reg_colors_gtkrc, FALSE);
}
static guint32
@@ -2611,6 +2655,9 @@ gnc_split_register_model_new (void)
gnc_table_model_set_fg_color_handler(
model, gnc_split_register_get_fg_color, RBALN_CELL);
+ gnc_table_model_set_fg_color_handler(
+ model, gnc_split_register_get_gtkrc_fg_color, "gtkrc");
+
gnc_table_model_set_default_bg_color_handler(
model, gnc_split_register_get_bg_color);
diff --git a/src/register/ledger-core/split-register-model.h b/src/register/ledger-core/split-register-model.h
index f26e28c..fc9b0df 100644
--- a/src/register/ledger-core/split-register-model.h
+++ b/src/register/ledger-core/split-register-model.h
@@ -30,6 +30,7 @@ TableModel * gnc_template_register_model_new (void);
typedef enum
{
+ /* Colors used for background drawing */
COLOR_UNKNOWN_BG,
COLOR_HEADER_BG,
COLOR_PRIMARY_BG,
@@ -38,6 +39,22 @@ typedef enum
COLOR_SECONDARY_BG_ACTIVE,
COLOR_SPLIT_BG,
COLOR_SPLIT_BG_ACTIVE,
+
+ /* Colors used for foreground drawing (text etc)
+ * ATTENTION: the background and foreground lists should have
+ * the same types (the same amount of entries) !
+ * The code relies on this ! */
+ COLOR_UNKNOWN_FG,
+ COLOR_HEADER_FG,
+ COLOR_PRIMARY_FG,
+ COLOR_PRIMARY_FG_ACTIVE,
+ COLOR_SECONDARY_FG,
+ COLOR_SECONDARY_FG_ACTIVE,
+ COLOR_SPLIT_FG,
+ COLOR_SPLIT_FG_ACTIVE,
+
+ /* Other colors */
+ COLOR_NEGATIVE, /* Color to use for negative numbers */
} RegisterColor;
#endif
diff --git a/src/register/register-core/table-allgui.c b/src/register/register-core/table-allgui.c
index 29ec9b0..8e7a010 100644
--- a/src/register/register-core/table-allgui.c
+++ b/src/register/register-core/table-allgui.c
@@ -345,25 +345,39 @@ gnc_table_get_label (Table *table, VirtualLocation virt_loc)
return label;
}
-guint32
-gnc_table_get_fg_color (Table *table, VirtualLocation virt_loc)
+static guint32
+gnc_table_get_fg_color_internal (Table *table, VirtualLocation virt_loc,
+ gboolean want_gtkrc)
{
TableGetFGColorHandler fg_color_handler;
- const char *cell_name;
+ const char *handler_name = "gtkrc";
if (!table || !table->model)
return 0x0; /* black */
- cell_name = gnc_table_get_cell_name (table, virt_loc);
+ if (!want_gtkrc)
+ handler_name = gnc_table_get_cell_name (table, virt_loc);
fg_color_handler = gnc_table_model_get_fg_color_handler (table->model,
- cell_name);
+ handler_name);
if (!fg_color_handler)
return 0x0;
return fg_color_handler (virt_loc, table->model->handler_user_data);
}
+guint32
+gnc_table_get_fg_color (Table *table, VirtualLocation virt_loc)
+{
+ return gnc_table_get_fg_color_internal (table, virt_loc, FALSE);
+}
+
+guint32
+gnc_table_get_gtkrc_fg_color (Table *table, VirtualLocation virt_loc)
+{
+ return gnc_table_get_fg_color_internal (table, virt_loc, TRUE);
+}
+
static guint32
gnc_table_get_bg_color_internal (Table *table, VirtualLocation virt_loc,
gboolean *hatching,
diff --git a/src/register/register-core/table-allgui.h b/src/register/register-core/table-allgui.h
index 0f7bbd4..5fe7a91 100644
--- a/src/register/register-core/table-allgui.h
+++ b/src/register/register-core/table-allgui.h
@@ -210,6 +210,8 @@ CellIOFlags gnc_table_get_io_flags (Table *table, VirtualLocation virt_loc);
guint32 gnc_table_get_fg_color (Table *table, VirtualLocation virt_loc);
+guint32 gnc_table_get_gtkrc_fg_color (Table *table, VirtualLocation virt_loc);
+
guint32 gnc_table_get_bg_color (Table *table, VirtualLocation virt_loc,
gboolean *hatching);
guint32 gnc_table_get_gtkrc_bg_color (Table *table, VirtualLocation virt_loc,
diff --git a/src/register/register-gnome/gnucash-grid.c b/src/register/register-gnome/gnucash-grid.c
index d357c8f..3272104 100644
--- a/src/register/register-gnome/gnucash-grid.c
+++ b/src/register/register-gnome/gnucash-grid.c
@@ -605,17 +605,25 @@ draw_cell (GnucashGrid *grid,
context = pango_layout_get_context (layout);
font = pango_font_description_copy (pango_context_get_font_description (context));
- argb = gnc_table_get_fg_color (table, virt_loc);
-#ifdef READONLY_LINES_WITH_CHANGED_FG_COLOR
- // Are we in a read-only row? Then make the foreground color somewhat less black
- if ((virt_loc.phys_row_offset == (block->style->nrows - 1))
- && (table->model->dividing_row_upper >= 0)
- && (virt_loc.vcell_loc.virt_row < table->model->dividing_row_upper))
+ if (grid->sheet->use_theme_colors)
{
- argb = inc_intensity_10percent(argb);
+ color_type = gnc_table_get_gtkrc_fg_color (table, virt_loc);
+ fg_color = get_gtkrc_color(grid->sheet, color_type);
}
+ else
+ {
+ argb = gnc_table_get_fg_color (table, virt_loc);
+#ifdef READONLY_LINES_WITH_CHANGED_FG_COLOR
+ // Are we in a read-only row? Then make the foreground color somewhat less black
+ if ((virt_loc.phys_row_offset == (block->style->nrows - 1))
+ && (table->model->dividing_row_upper >= 0)
+ && (virt_loc.vcell_loc.virt_row < table->model->dividing_row_upper))
+ {
+ argb = inc_intensity_10percent(argb);
+ }
#endif
- fg_color = gnucash_color_argb_to_gdk (argb);
+ fg_color = gnucash_color_argb_to_gdk (argb);
+ }
gdk_gc_set_foreground (grid->gc, fg_color);
diff --git a/src/register/register-gnome/gnucash-header.c b/src/register/register-gnome/gnucash-header.c
index 7d902d5..dab6873 100644
--- a/src/register/register-gnome/gnucash-header.c
+++ b/src/register/register-gnome/gnucash-header.c
@@ -75,7 +75,7 @@ gnc_header_draw (GnomeCanvasItem *item, GdkDrawable *drawable,
VirtualLocation virt_loc;
VirtualCell *vcell;
CellDimensions *cd;
- GdkColor *bg_color;
+ GdkColor *bg_color, *fg_color;
int xpaint, ypaint;
const char *text;
CellBlock *cb;
@@ -94,11 +94,15 @@ gnc_header_draw (GnomeCanvasItem *item, GdkDrawable *drawable,
color_type = gnc_table_get_gtkrc_bg_color (table, virt_loc,
NULL);
bg_color = get_gtkrc_color(header->sheet, color_type);
+ color_type = gnc_table_get_gtkrc_fg_color (table, virt_loc);
+ fg_color = get_gtkrc_color(header->sheet, color_type);
}
else
{
argb = gnc_table_get_bg_color (table, virt_loc, NULL);
bg_color = gnucash_color_argb_to_gdk (argb);
+ argb = gnc_table_get_fg_color (table, virt_loc);
+ fg_color = gnucash_color_argb_to_gdk (argb);
}
h = style->dimensions->height;
@@ -111,7 +115,7 @@ gnc_header_draw (GnomeCanvasItem *item, GdkDrawable *drawable,
style->dimensions->width, h);
gdk_gc_set_line_attributes (header->gc, 1, GDK_LINE_SOLID, GDK_CAP_NOT_LAST, GDK_JOIN_MITER);
- gdk_gc_set_foreground (header->gc, &gn_black);
+ gdk_gc_set_foreground (header->gc, fg_color);
gdk_draw_rectangle (drawable, header->gc, FALSE, -x, -y,
style->dimensions->width, h);
@@ -121,7 +125,7 @@ gnc_header_draw (GnomeCanvasItem *item, GdkDrawable *drawable,
gdk_gc_set_line_attributes (header->gc, 1, GDK_LINE_SOLID, GDK_CAP_NOT_LAST, GDK_JOIN_MITER);
gdk_gc_set_background (header->gc, &gn_white);
- gdk_gc_set_foreground (header->gc, &gn_black);
+ gdk_gc_set_foreground (header->gc, fg_color);
/*font = gnucash_register_font;*/
vcell = gnc_table_get_virtual_cell
diff --git a/src/register/register-gnome/gnucash-item-edit.c b/src/register/register-gnome/gnucash-item-edit.c
index 3486ffb..9b34102 100644
--- a/src/register/register-gnome/gnucash-item-edit.c
+++ b/src/register/register-gnome/gnucash-item-edit.c
@@ -196,16 +196,20 @@ gnc_item_edit_draw_info (GncItemEdit *item_edit, int x, int y, TextDrawInfo *inf
item_edit->virt_loc,
&hatching);
info->bg_color = get_gtkrc_color(item_edit->sheet, color_type);
+ color_type = gnc_table_get_gtkrc_fg_color (table,
+ item_edit->virt_loc);
+ info->fg_color = get_gtkrc_color(item_edit->sheet, color_type);
}
else
{
argb = gnc_table_get_bg_color (table, item_edit->virt_loc,
&hatching);
info->bg_color = gnucash_color_argb_to_gdk (argb);
+ argb = gnc_table_get_fg_color (table, item_edit->virt_loc);
+ info->fg_color = gnucash_color_argb_to_gdk (argb);
}
info->hatching = hatching;
- info->fg_color = &gn_black;
info->bg_color2 = &gn_dark_gray;
info->fg_color2 = &gn_white;
diff --git a/src/register/register-gnome/gnucash-sheet.c b/src/register/register-gnome/gnucash-sheet.c
index 03f6918..06c639e 100644
--- a/src/register/register-gnome/gnucash-sheet.c
+++ b/src/register/register-gnome/gnucash-sheet.c
@@ -2609,31 +2609,49 @@ get_gtkrc_color (GnucashSheet *sheet,
{
GtkWidget *widget = NULL;
GtkStyle *style;
- GdkColor *white;
+ GdkColor *white, *black, *red;
GdkColor *color = NULL;
white = gnucash_color_argb_to_gdk (0xFFFFFF);
+ black = gnucash_color_argb_to_gdk (0x000000);
+ red = gnucash_color_argb_to_gdk (0xFF0000); /* Hardcoded...*/
switch (field_type)
{
default:
return white;
+ case COLOR_UNKNOWN_BG:
+ return white;
+
+ case COLOR_UNKNOWN_FG:
+ return black;
+
+ case COLOR_NEGATIVE:
+ return red;
+
case COLOR_HEADER_BG:
+ case COLOR_HEADER_FG:
widget = sheet->header_color;
break;
case COLOR_PRIMARY_BG:
case COLOR_PRIMARY_BG_ACTIVE:
+ case COLOR_PRIMARY_FG:
+ case COLOR_PRIMARY_FG_ACTIVE:
widget = sheet->primary_color;
break;
case COLOR_SECONDARY_BG:
case COLOR_SECONDARY_BG_ACTIVE:
+ case COLOR_SECONDARY_FG:
+ case COLOR_SECONDARY_FG_ACTIVE:
widget = sheet->secondary_color;
break;
case COLOR_SPLIT_BG:
case COLOR_SPLIT_BG_ACTIVE:
+ case COLOR_SPLIT_FG:
+ case COLOR_SPLIT_FG_ACTIVE:
widget = sheet->split_color;
break;
}
@@ -2659,6 +2677,19 @@ get_gtkrc_color (GnucashSheet *sheet,
case COLOR_SPLIT_BG_ACTIVE:
color = &style->base[GTK_STATE_SELECTED];
break;
+
+ case COLOR_HEADER_FG:
+ case COLOR_PRIMARY_FG:
+ case COLOR_SECONDARY_FG:
+ case COLOR_SPLIT_FG:
+ color = &style->text[GTK_STATE_NORMAL];
+ break;
+
+ case COLOR_PRIMARY_FG_ACTIVE:
+ case COLOR_SECONDARY_FG_ACTIVE:
+ case COLOR_SPLIT_FG_ACTIVE:
+ color = &style->text[GTK_STATE_SELECTED];
+ break;
}
gnucash_color_alloc_gdk(color);
commit 61cd3f1106c4549fcad404aa7eeef463a014a93e
Author: Geert Janssens <janssens-geert at telenet.be>
Date: Sat Aug 30 16:09:01 2014 +0200
Rename enum elements to make room for foreground equivalents
diff --git a/src/register/ledger-core/split-register-model.c b/src/register/ledger-core/split-register-model.c
index 2e34b4e..af029da 100644
--- a/src/register/ledger-core/split-register-model.c
+++ b/src/register/ledger-core/split-register-model.c
@@ -52,14 +52,14 @@ typedef enum
*/
static const guint32 reg_colors_default [] =
{
- 0x000000, // COLOR_UNKNOWN
- 0x96B183, // COLOR_HEADER
- 0xBFDEB9, // COLOR_PRIMARY
- 0xFFEF98, // COLOR_PRIMARY_ACTIVE
- 0xF6FFDA, // COLOR_SECONDARY
- 0xFFEF98, // COLOR_SECONDARY_ACTIVE
- 0xEDE7D3, // COLOR_SPLIT
- 0xFFEF98, // COLOR_SPLIT_ACTIVE
+ 0xFFFFFF, // COLOR_UNKNOWN_BG
+ 0x96B183, // COLOR_HEADER_BG
+ 0xBFDEB9, // COLOR_PRIMARY_BG
+ 0xFFEF98, // COLOR_PRIMARY_BG_ACTIVE
+ 0xF6FFDA, // COLOR_SECONDARY_BG
+ 0xFFEF98, // COLOR_SECONDARY_BG_ACTIVE
+ 0xEDE7D3, // COLOR_SPLIT_BG
+ 0xFFEF98, // COLOR_SPLIT_BG_ACTIVE
};
/* The colors in this array are ordered according to the RegisterColor Enum
@@ -67,14 +67,14 @@ static const guint32 reg_colors_default [] =
*/
static const guint32 reg_colors_gtkrc [] =
{
- COLOR_UNKNOWN, // COLOR_UNKNOWN
- COLOR_HEADER, // COLOR_HEADER
- COLOR_PRIMARY, // COLOR_PRIMARY
- COLOR_PRIMARY_ACTIVE, // COLOR_PRIMARY_ACTIVE
- COLOR_SECONDARY, // COLOR_SECONDARY
- COLOR_SECONDARY_ACTIVE, // COLOR_SECONDARY_ACTIVE
- COLOR_SPLIT, // COLOR_SPLIT
- COLOR_SPLIT_ACTIVE, // COLOR_SPLIT_ACTIVE
+ COLOR_UNKNOWN_BG, // COLOR_UNKNOWN_BG
+ COLOR_HEADER_BG, // COLOR_HEADER_BG
+ COLOR_PRIMARY_BG, // COLOR_PRIMARY_BG
+ COLOR_PRIMARY_BG_ACTIVE, // COLOR_PRIMARY_BG_ACTIVE
+ COLOR_SECONDARY_BG, // COLOR_SECONDARY_BG
+ COLOR_SECONDARY_BG_ACTIVE, // COLOR_SECONDARY_BG_ACTIVE
+ COLOR_SPLIT_BG, // COLOR_SPLIT_BG
+ COLOR_SPLIT_BG_ACTIVE, // COLOR_SPLIT_BG_ACTIVE
};
/* This static indicates the debugging module that this .o belongs to. */
@@ -608,7 +608,7 @@ gnc_split_register_get_bg_color_internal (VirtualLocation virt_loc,
return default_color;
if (gnc_table_virtual_location_in_header (reg->table, virt_loc))
- return color_table[COLOR_HEADER];
+ return color_table[COLOR_HEADER_BG];
vcell = gnc_table_get_virtual_cell (reg->table, virt_loc.vcell_loc);
if (!vcell || !vcell->cellblock)
@@ -628,11 +628,11 @@ gnc_split_register_get_bg_color_internal (VirtualLocation virt_loc,
{
if (is_current)
return vcell->start_primary_color ?
- color_table[COLOR_PRIMARY_ACTIVE] :
- color_table[COLOR_SECONDARY_ACTIVE];
+ color_table[COLOR_PRIMARY_BG_ACTIVE] :
+ color_table[COLOR_SECONDARY_BG_ACTIVE];
return vcell->start_primary_color ?
- color_table[COLOR_PRIMARY] : color_table[COLOR_SECONDARY];
+ color_table[COLOR_PRIMARY_BG] : color_table[COLOR_SECONDARY_BG];
}
if (g_strcmp0 (cursor_name, CURSOR_DOUBLE_JOURNAL) == 0 ||
@@ -646,30 +646,30 @@ gnc_split_register_get_bg_color_internal (VirtualLocation virt_loc,
{
if (double_alternate_virt)
return vcell->start_primary_color ?
- color_table[COLOR_PRIMARY_ACTIVE] :
- color_table[COLOR_SECONDARY_ACTIVE];
+ color_table[COLOR_PRIMARY_BG_ACTIVE] :
+ color_table[COLOR_SECONDARY_BG_ACTIVE];
return (virt_loc.phys_row_offset % 2 == 0) ?
- color_table[COLOR_PRIMARY_ACTIVE] :
- color_table[COLOR_SECONDARY_ACTIVE];
+ color_table[COLOR_PRIMARY_BG_ACTIVE] :
+ color_table[COLOR_SECONDARY_BG_ACTIVE];
}
if (double_alternate_virt)
return vcell->start_primary_color ?
- color_table[COLOR_PRIMARY] :
- color_table[COLOR_SECONDARY];
+ color_table[COLOR_PRIMARY_BG] :
+ color_table[COLOR_SECONDARY_BG];
return (virt_loc.phys_row_offset % 2 == 0) ?
- color_table[COLOR_PRIMARY] :
- color_table[COLOR_SECONDARY];
+ color_table[COLOR_PRIMARY_BG] :
+ color_table[COLOR_SECONDARY_BG];
}
if (g_strcmp0 (cursor_name, CURSOR_SPLIT) == 0)
{
if (is_current)
- return color_table[COLOR_SPLIT_ACTIVE];
+ return color_table[COLOR_SPLIT_BG_ACTIVE];
- return color_table[COLOR_SPLIT];
+ return color_table[COLOR_SPLIT_BG];
}
PWARN ("Unexpected cursor: %s\n", cursor_name);
@@ -701,7 +701,7 @@ gnc_split_register_get_gtkrc_bg_color (VirtualLocation virt_loc,
if (hatching)
*hatching = FALSE;
- return gnc_split_register_get_bg_color_internal (virt_loc, reg, reg_colors_gtkrc, COLOR_UNKNOWN);
+ return gnc_split_register_get_bg_color_internal (virt_loc, reg, reg_colors_gtkrc, COLOR_UNKNOWN_BG);
}
static guint32
diff --git a/src/register/ledger-core/split-register-model.h b/src/register/ledger-core/split-register-model.h
index e3ace1b..f26e28c 100644
--- a/src/register/ledger-core/split-register-model.h
+++ b/src/register/ledger-core/split-register-model.h
@@ -30,14 +30,14 @@ TableModel * gnc_template_register_model_new (void);
typedef enum
{
- COLOR_UNKNOWN,
- COLOR_HEADER,
- COLOR_PRIMARY,
- COLOR_PRIMARY_ACTIVE,
- COLOR_SECONDARY,
- COLOR_SECONDARY_ACTIVE,
- COLOR_SPLIT,
- COLOR_SPLIT_ACTIVE,
+ COLOR_UNKNOWN_BG,
+ COLOR_HEADER_BG,
+ COLOR_PRIMARY_BG,
+ COLOR_PRIMARY_BG_ACTIVE,
+ COLOR_SECONDARY_BG,
+ COLOR_SECONDARY_BG_ACTIVE,
+ COLOR_SPLIT_BG,
+ COLOR_SPLIT_BG_ACTIVE,
} RegisterColor;
#endif
diff --git a/src/register/register-gnome/gnucash-sheet.c b/src/register/register-gnome/gnucash-sheet.c
index 1c17b76..03f6918 100644
--- a/src/register/register-gnome/gnucash-sheet.c
+++ b/src/register/register-gnome/gnucash-sheet.c
@@ -2618,22 +2618,22 @@ get_gtkrc_color (GnucashSheet *sheet,
default:
return white;
- case COLOR_HEADER:
+ case COLOR_HEADER_BG:
widget = sheet->header_color;
break;
- case COLOR_PRIMARY:
- case COLOR_PRIMARY_ACTIVE:
+ case COLOR_PRIMARY_BG:
+ case COLOR_PRIMARY_BG_ACTIVE:
widget = sheet->primary_color;
break;
- case COLOR_SECONDARY:
- case COLOR_SECONDARY_ACTIVE:
+ case COLOR_SECONDARY_BG:
+ case COLOR_SECONDARY_BG_ACTIVE:
widget = sheet->secondary_color;
break;
- case COLOR_SPLIT:
- case COLOR_SPLIT_ACTIVE:
+ case COLOR_SPLIT_BG:
+ case COLOR_SPLIT_BG_ACTIVE:
widget = sheet->split_color;
break;
}
@@ -2647,16 +2647,16 @@ get_gtkrc_color (GnucashSheet *sheet,
default:
return white;
- case COLOR_HEADER:
- case COLOR_PRIMARY:
- case COLOR_SECONDARY:
- case COLOR_SPLIT:
+ case COLOR_HEADER_BG:
+ case COLOR_PRIMARY_BG:
+ case COLOR_SECONDARY_BG:
+ case COLOR_SPLIT_BG:
color = &style->base[GTK_STATE_NORMAL];
break;
- case COLOR_PRIMARY_ACTIVE:
- case COLOR_SECONDARY_ACTIVE:
- case COLOR_SPLIT_ACTIVE:
+ case COLOR_PRIMARY_BG_ACTIVE:
+ case COLOR_SECONDARY_BG_ACTIVE:
+ case COLOR_SPLIT_BG_ACTIVE:
color = &style->base[GTK_STATE_SELECTED];
break;
}
commit 904afd8bd517f20897883200feb0b821d0407b8f
Author: Geert Janssens <janssens-geert at telenet.be>
Date: Sat Aug 30 15:51:22 2014 +0200
Refactor register color functions to reduce duplication
diff --git a/src/register/ledger-core/split-register-model.c b/src/register/ledger-core/split-register-model.c
index 4ff22af..2e34b4e 100644
--- a/src/register/ledger-core/split-register-model.c
+++ b/src/register/ledger-core/split-register-model.c
@@ -40,15 +40,41 @@
#include "engine-helpers.h"
-static SplitRegisterColors reg_colors =
-{
- 0x96B183,
- 0xBFDEB9,
- 0xF6FFDA,
- 0xFFEF98,
- 0xFFEF98,
- 0xEDE7D3,
- 0xFFEF98,
+typedef enum
+{
+ COLOR_TABLE_DEFAULT,
+ COLOR_TABLE_GTKRC,
+} SplitRegisterColorTable;
+
+/* Alternative color tables to use for the register.
+ * The colors in this array are ordered according to the RegisterColor Enum
+ * Be careful to respect this order !
+ */
+static const guint32 reg_colors_default [] =
+{
+ 0x000000, // COLOR_UNKNOWN
+ 0x96B183, // COLOR_HEADER
+ 0xBFDEB9, // COLOR_PRIMARY
+ 0xFFEF98, // COLOR_PRIMARY_ACTIVE
+ 0xF6FFDA, // COLOR_SECONDARY
+ 0xFFEF98, // COLOR_SECONDARY_ACTIVE
+ 0xEDE7D3, // COLOR_SPLIT
+ 0xFFEF98, // COLOR_SPLIT_ACTIVE
+};
+
+/* The colors in this array are ordered according to the RegisterColor Enum
+ * Be careful to respect this order !
+ */
+static const guint32 reg_colors_gtkrc [] =
+{
+ COLOR_UNKNOWN, // COLOR_UNKNOWN
+ COLOR_HEADER, // COLOR_HEADER
+ COLOR_PRIMARY, // COLOR_PRIMARY
+ COLOR_PRIMARY_ACTIVE, // COLOR_PRIMARY_ACTIVE
+ COLOR_SECONDARY, // COLOR_SECONDARY
+ COLOR_SECONDARY_ACTIVE, // COLOR_SECONDARY_ACTIVE
+ COLOR_SPLIT, // COLOR_SPLIT
+ COLOR_SPLIT_ACTIVE, // COLOR_SPLIT_ACTIVE
};
/* This static indicates the debugging module that this .o belongs to. */
@@ -513,15 +539,15 @@ get_trans_total_balance (SplitRegister *reg, Transaction *trans)
}
static guint32
-gnc_split_register_get_shares_fg_color (VirtualLocation virt_loc,
- gpointer user_data)
+gnc_split_register_get_fg_color (VirtualLocation virt_loc,
+ gpointer user_data)
{
SplitRegister *reg = user_data;
const guint32 black = 0x000000;
const guint32 red = 0xff0000;
const char * cell_name;
gboolean is_current;
- gnc_numeric shares;
+ gnc_numeric value;
Split *split;
if (!use_red_for_negative)
@@ -533,96 +559,64 @@ gnc_split_register_get_shares_fg_color (VirtualLocation virt_loc,
cell_name = gnc_table_get_cell_name (reg->table, virt_loc);
- is_current = virt_cell_loc_equal (reg->table->current_cursor_loc.vcell_loc,
- virt_loc.vcell_loc);
-
if (gnc_cell_name_equal (cell_name, TSHRS_CELL))
- shares = get_trans_total_amount (reg, xaccSplitGetParent (split));
- else if (is_current)
- shares = gnc_price_cell_get_value
- ((PriceCell *) gnc_table_layout_get_cell (reg->table->layout,
- SHRS_CELL));
- else
- shares = xaccSplitGetAmount (split);
-
- if (gnc_numeric_negative_p (shares))
- return red;
-
- return black;
-}
-
-static guint32
-gnc_split_register_get_balance_fg_color (VirtualLocation virt_loc,
- gpointer user_data)
-{
- SplitRegister *reg = user_data;
- const guint32 black = 0x000000;
- const guint32 red = 0xff0000;
- const char * cell_name;
- gnc_numeric balance;
- Split *split;
-
- if (!use_red_for_negative)
- return black;
-
- split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
- if (!split)
- return black;
-
- cell_name = gnc_table_get_cell_name (reg->table, virt_loc);
-
- if (gnc_cell_name_equal (cell_name, BALN_CELL))
- balance = xaccSplitGetBalance (split);
- else if (gnc_cell_name_equal (cell_name, RBALN_CELL))
- balance = gnc_split_register_get_rbaln (virt_loc, user_data, TRUE);
- else
- balance = get_trans_total_balance (reg, xaccSplitGetParent (split));
-
+ value = get_trans_total_amount (reg, xaccSplitGetParent (split));
+ else if (gnc_cell_name_equal (cell_name, SHRS_CELL))
{
- Account *account;
-
- account = xaccSplitGetAccount (split);
-
- if (gnc_reverse_balance (account))
- balance = gnc_numeric_neg (balance);
+ if (virt_cell_loc_equal (reg->table->current_cursor_loc.vcell_loc,
+ virt_loc.vcell_loc))
+ value = gnc_price_cell_get_value
+ ((PriceCell *) gnc_table_layout_get_cell (reg->table->layout,
+ SHRS_CELL));
+ else
+ value = xaccSplitGetAmount (split);
}
+ else if (gnc_cell_name_equal (cell_name, BALN_CELL))
+ value = xaccSplitGetBalance (split);
+ else if (gnc_cell_name_equal (cell_name, RBALN_CELL))
+ value = gnc_split_register_get_rbaln (virt_loc, user_data, TRUE);
+ else if (gnc_cell_name_equal (cell_name, TBALN_CELL))
+ value = get_trans_total_balance (reg, xaccSplitGetParent (split));
+
+ if ((gnc_cell_name_equal (cell_name, BALN_CELL)) ||
+ (gnc_cell_name_equal (cell_name, RBALN_CELL)) ||
+ (gnc_cell_name_equal (cell_name, TBALN_CELL)))
+ {
+ Account *account = xaccSplitGetAccount (split);
+ if (gnc_reverse_balance (account))
+ value = gnc_numeric_neg (value);
+ }
- if (gnc_numeric_negative_p (balance))
+ if (gnc_numeric_negative_p (value))
return red;
return black;
}
static guint32
-gnc_split_register_get_bg_color (VirtualLocation virt_loc,
- gboolean *hatching,
- gpointer user_data)
+gnc_split_register_get_bg_color_internal (VirtualLocation virt_loc,
+ SplitRegister *reg,
+ const guint32 *color_table,
+ guint32 default_color)
{
- SplitRegister *reg = user_data;
const char *cursor_name;
VirtualCell *vcell;
- guint32 bg_color;
gboolean is_current;
gboolean double_alternate_virt;
- if (hatching)
- *hatching = FALSE;
-
- bg_color = 0xffffff; /* white */
-
if (!reg)
- return bg_color;
+ return default_color;
if (gnc_table_virtual_location_in_header (reg->table, virt_loc))
- return reg_colors.header_bg_color;
+ return color_table[COLOR_HEADER];
vcell = gnc_table_get_virtual_cell (reg->table, virt_loc.vcell_loc);
if (!vcell || !vcell->cellblock)
- return bg_color;
+ return default_color;
if ((virt_loc.phys_col_offset < vcell->cellblock->start_col) ||
(virt_loc.phys_col_offset > vcell->cellblock->stop_col))
- return bg_color;
+ return default_color;
is_current = virt_cell_loc_equal (reg->table->current_cursor_loc.vcell_loc,
virt_loc.vcell_loc);
@@ -634,11 +628,11 @@ gnc_split_register_get_bg_color (VirtualLocation virt_loc,
{
if (is_current)
return vcell->start_primary_color ?
- reg_colors.primary_active_bg_color :
- reg_colors.secondary_active_bg_color;
+ color_table[COLOR_PRIMARY_ACTIVE] :
+ color_table[COLOR_SECONDARY_ACTIVE];
return vcell->start_primary_color ?
- reg_colors.primary_bg_color : reg_colors.secondary_bg_color;
+ color_table[COLOR_PRIMARY] : color_table[COLOR_SECONDARY];
}
if (g_strcmp0 (cursor_name, CURSOR_DOUBLE_JOURNAL) == 0 ||
@@ -652,119 +646,62 @@ gnc_split_register_get_bg_color (VirtualLocation virt_loc,
{
if (double_alternate_virt)
return vcell->start_primary_color ?
- reg_colors.primary_active_bg_color :
- reg_colors.secondary_active_bg_color;
+ color_table[COLOR_PRIMARY_ACTIVE] :
+ color_table[COLOR_SECONDARY_ACTIVE];
return (virt_loc.phys_row_offset % 2 == 0) ?
- reg_colors.primary_active_bg_color :
- reg_colors.secondary_active_bg_color;
+ color_table[COLOR_PRIMARY_ACTIVE] :
+ color_table[COLOR_SECONDARY_ACTIVE];
}
if (double_alternate_virt)
return vcell->start_primary_color ?
- reg_colors.primary_bg_color :
- reg_colors.secondary_bg_color;
+ color_table[COLOR_PRIMARY] :
+ color_table[COLOR_SECONDARY];
return (virt_loc.phys_row_offset % 2 == 0) ?
- reg_colors.primary_bg_color :
- reg_colors.secondary_bg_color;
+ color_table[COLOR_PRIMARY] :
+ color_table[COLOR_SECONDARY];
}
if (g_strcmp0 (cursor_name, CURSOR_SPLIT) == 0)
{
if (is_current)
- return reg_colors.split_active_bg_color;
+ return color_table[COLOR_SPLIT_ACTIVE];
- return reg_colors.split_bg_color;
+ return color_table[COLOR_SPLIT];
}
PWARN ("Unexpected cursor: %s\n", cursor_name);
- return bg_color;
+ return default_color;
}
-static RegisterColor
-gnc_split_register_get_gtkrc_bg_color (VirtualLocation virt_loc,
- gboolean *hatching,
- gpointer user_data)
+static guint32
+gnc_split_register_get_bg_color (VirtualLocation virt_loc,
+ gboolean *hatching,
+ gpointer user_data)
{
SplitRegister *reg = user_data;
- const char *cursor_name;
- VirtualCell *vcell;
- gboolean is_current;
- gboolean double_alternate_virt;
-
- if (!reg)
- return COLOR_UNKNOWN;
-
- if (gnc_table_virtual_location_in_header (reg->table, virt_loc))
- return COLOR_HEADER;
-
- vcell = gnc_table_get_virtual_cell (reg->table, virt_loc.vcell_loc);
- if (!vcell || !vcell->cellblock)
- return COLOR_UNKNOWN;
-
- if ((virt_loc.phys_col_offset < vcell->cellblock->start_col) ||
- (virt_loc.phys_col_offset > vcell->cellblock->stop_col))
- return COLOR_UNKNOWN;
-
- is_current = virt_cell_loc_equal (reg->table->current_cursor_loc.vcell_loc,
- virt_loc.vcell_loc);
-
- cursor_name = vcell->cellblock->cursor_name;
-
- if (g_strcmp0 (cursor_name, CURSOR_SINGLE_JOURNAL) == 0 ||
- g_strcmp0 (cursor_name, CURSOR_SINGLE_LEDGER) == 0)
- {
- if (is_current)
- return vcell->start_primary_color ?
- COLOR_PRIMARY_ACTIVE :
- COLOR_SECONDARY_ACTIVE;
-
- return vcell->start_primary_color ?
- COLOR_PRIMARY : COLOR_SECONDARY;
- }
-
- if (g_strcmp0 (cursor_name, CURSOR_DOUBLE_JOURNAL) == 0 ||
- g_strcmp0 (cursor_name, CURSOR_DOUBLE_JOURNAL_NUM_ACTN) == 0 ||
- g_strcmp0 (cursor_name, CURSOR_DOUBLE_LEDGER) == 0 ||
- g_strcmp0 (cursor_name, CURSOR_DOUBLE_LEDGER_NUM_ACTN) == 0)
- {
- double_alternate_virt = gnc_prefs_get_bool (GNC_PREFS_GROUP_GENERAL_REGISTER,
- GNC_PREF_ALT_COLOR_BY_TRANS);
- if (is_current)
- {
- if (double_alternate_virt)
- return vcell->start_primary_color ?
- COLOR_PRIMARY_ACTIVE :
- COLOR_SECONDARY_ACTIVE;
-
- return (virt_loc.phys_row_offset % 2 == 0) ?
- COLOR_PRIMARY_ACTIVE :
- COLOR_SECONDARY_ACTIVE;
- }
- if (double_alternate_virt)
- return vcell->start_primary_color ?
- COLOR_PRIMARY :
- COLOR_SECONDARY;
+ if (hatching)
+ *hatching = FALSE;
- return (virt_loc.phys_row_offset % 2 == 0) ?
- COLOR_PRIMARY :
- COLOR_SECONDARY;
- }
+ return gnc_split_register_get_bg_color_internal (virt_loc, reg, reg_colors_default, 0xffffff);
+}
- if (g_strcmp0 (cursor_name, CURSOR_SPLIT) == 0)
- {
- if (is_current)
- return COLOR_SPLIT_ACTIVE;
- return COLOR_SPLIT;
- }
+static RegisterColor
+gnc_split_register_get_gtkrc_bg_color (VirtualLocation virt_loc,
+ gboolean *hatching,
+ gpointer user_data)
+{
+ SplitRegister *reg = user_data;
- PWARN ("Unexpected cursor: %s\n", cursor_name);
+ if (hatching)
+ *hatching = FALSE;
- return COLOR_UNKNOWN;
+ return gnc_split_register_get_bg_color_internal (virt_loc, reg, reg_colors_gtkrc, COLOR_UNKNOWN);
}
static guint32
@@ -2660,19 +2597,19 @@ gnc_split_register_model_new (void)
gnc_table_model_set_fg_color_handler(
- model, gnc_split_register_get_shares_fg_color, SHRS_CELL);
+ model, gnc_split_register_get_fg_color, SHRS_CELL);
gnc_table_model_set_fg_color_handler(
- model, gnc_split_register_get_shares_fg_color, TSHRS_CELL);
+ model, gnc_split_register_get_fg_color, TSHRS_CELL);
gnc_table_model_set_fg_color_handler(
- model, gnc_split_register_get_balance_fg_color, BALN_CELL);
+ model, gnc_split_register_get_fg_color, BALN_CELL);
gnc_table_model_set_fg_color_handler(
- model, gnc_split_register_get_balance_fg_color, TBALN_CELL);
+ model, gnc_split_register_get_fg_color, TBALN_CELL);
gnc_table_model_set_fg_color_handler(
- model, gnc_split_register_get_balance_fg_color, RBALN_CELL);
+ model, gnc_split_register_get_fg_color, RBALN_CELL);
gnc_table_model_set_default_bg_color_handler(
diff --git a/src/register/ledger-core/split-register.h b/src/register/ledger-core/split-register.h
index b7ba1b4..5e82a04 100644
--- a/src/register/ledger-core/split-register.h
+++ b/src/register/ledger-core/split-register.h
@@ -238,20 +238,6 @@ typedef enum
NUM_CURSOR_CLASSES
} CursorClass;
-typedef struct split_register_colors
-{
- guint32 header_bg_color;
-
- guint32 primary_bg_color;
- guint32 secondary_bg_color;
-
- guint32 primary_active_bg_color;
- guint32 secondary_active_bg_color;
-
- guint32 split_bg_color;
- guint32 split_active_bg_color;
-} SplitRegisterColors;
-
/** @brief A split register created with ::gnc_split_register_new */
typedef struct split_register SplitRegister;
diff --git a/src/register/register-core/table-allgui.c b/src/register/register-core/table-allgui.c
index 3a9041f..29ec9b0 100644
--- a/src/register/register-core/table-allgui.c
+++ b/src/register/register-core/table-allgui.c
@@ -364,12 +364,13 @@ gnc_table_get_fg_color (Table *table, VirtualLocation virt_loc)
return fg_color_handler (virt_loc, table->model->handler_user_data);
}
-guint32
-gnc_table_get_bg_color (Table *table, VirtualLocation virt_loc,
- gboolean *hatching)
+static guint32
+gnc_table_get_bg_color_internal (Table *table, VirtualLocation virt_loc,
+ gboolean *hatching,
+ gboolean want_gtkrc)
{
TableGetBGColorHandler bg_color_handler;
- const char *cell_name;
+ const char *handler_name = "gtkrc";
if (hatching)
*hatching = FALSE;
@@ -377,10 +378,11 @@ gnc_table_get_bg_color (Table *table, VirtualLocation virt_loc,
if (!table || !table->model)
return 0xffffff; /* white */
- cell_name = gnc_table_get_cell_name (table, virt_loc);
+ if (!want_gtkrc)
+ handler_name = gnc_table_get_cell_name (table, virt_loc);
bg_color_handler = gnc_table_model_get_bg_color_handler (table->model,
- cell_name);
+ handler_name);
if (!bg_color_handler)
return 0xffffff;
@@ -389,24 +391,17 @@ gnc_table_get_bg_color (Table *table, VirtualLocation virt_loc,
}
guint32
+gnc_table_get_bg_color (Table *table, VirtualLocation virt_loc,
+ gboolean *hatching)
+{
+ return gnc_table_get_bg_color_internal (table, virt_loc, hatching, FALSE);
+}
+
+guint32
gnc_table_get_gtkrc_bg_color (Table *table, VirtualLocation virt_loc,
gboolean *hatching)
{
- TableGetBGColorHandler bg_color_handler;
-
- if (hatching)
- *hatching = FALSE;
-
- if (!table || !table->model)
- return 0xffffff; /* white */
-
- bg_color_handler = gnc_table_model_get_bg_color_handler (table->model,
- "gtkrc");
- if (!bg_color_handler)
- return 0xffffff;
-
- return bg_color_handler (virt_loc, hatching,
- table->model->handler_user_data);
+ return gnc_table_get_bg_color_internal (table, virt_loc, hatching, TRUE);
}
void
commit 0a394c5bba98b54011777668f3f8226b5962af6c
Author: Geert Janssens <janssens-geert at telenet.be>
Date: Sat Aug 30 12:24:32 2014 +0200
Bug 711440 - Tab labels have different background colour than containing gui element
diff --git a/src/gnome-utils/gnc-main-window.c b/src/gnome-utils/gnc-main-window.c
index 4ab4257..0635cf7 100644
--- a/src/gnome-utils/gnc-main-window.c
+++ b/src/gnome-utils/gnc-main-window.c
@@ -130,7 +130,6 @@ static void gnc_main_window_destroy (GtkObject *object);
static void gnc_main_window_setup_window (GncMainWindow *window);
static void gnc_window_main_window_init (GncWindowIface *iface);
-static gboolean main_window_find_tab_event (GncMainWindow *window, GncPluginPage *page, GtkWidget **event_p);
#ifndef MAC_INTEGRATION
static void gnc_main_window_update_all_menu_items (void);
#endif
@@ -2009,31 +2008,11 @@ static void
gnc_main_window_update_tab_color_one_page (GncPluginPage *page,
gpointer user_data)
{
- GncMainWindow *window = user_data;
- GncMainWindowPrivate *priv;
const gchar *color_string;
- GdkColor tab_color;
- GtkWidget *event_box;
ENTER("page %p", page);
-
- priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
-
- /* Get the event box to update the tab */
- main_window_find_tab_event(window, page, &event_box);
-
color_string = gnc_plugin_page_get_page_color(page);
- if (color_string == NULL) color_string = "";
- if (gdk_color_parse(color_string, &tab_color) && priv->show_color_tabs)
- {
- gtk_widget_modify_bg(event_box, GTK_STATE_NORMAL, &tab_color);
- gtk_widget_modify_bg(event_box, GTK_STATE_ACTIVE, &tab_color);
- }
- else
- {
- gtk_widget_modify_bg(event_box, GTK_STATE_NORMAL, NULL);
- gtk_widget_modify_bg(event_box, GTK_STATE_ACTIVE, NULL);
- }
+ main_window_update_page_color (page, color_string);
LEAVE(" ");
}
@@ -2142,7 +2121,7 @@ main_window_find_tab_items (GncMainWindow *window,
GtkWidget **entry_p)
{
GncMainWindowPrivate *priv;
- GtkWidget *tab_hbox, *widget, *event_box;
+ GtkWidget *tab_hbox, *widget, *tab_widget;
GList *children, *tmp;
ENTER("window %p, page %p, label_p %p, entry_p %p",
@@ -2156,10 +2135,17 @@ main_window_find_tab_items (GncMainWindow *window,
return FALSE;
}
- event_box = gtk_notebook_get_tab_label(GTK_NOTEBOOK(priv->notebook),
+ tab_widget = gtk_notebook_get_tab_label(GTK_NOTEBOOK(priv->notebook),
page->notebook_page);
-
- tab_hbox = gtk_bin_get_child(GTK_BIN(event_box));
+ if (GTK_IS_EVENT_BOX (tab_widget))
+ tab_hbox = gtk_bin_get_child(GTK_BIN(tab_widget));
+ else if (GTK_IS_HBOX (tab_widget))
+ tab_hbox = tab_widget;
+ else
+ {
+ PWARN ("Unknown widget for tab label %p", tab_widget);
+ return FALSE;
+ }
children = gtk_container_get_children(GTK_CONTAINER(tab_hbox));
for (tmp = children; tmp; tmp = g_list_next(tmp))
@@ -2181,16 +2167,15 @@ main_window_find_tab_items (GncMainWindow *window,
}
static gboolean
-main_window_find_tab_event (GncMainWindow *window,
- GncPluginPage *page,
- GtkWidget **event_p)
+main_window_find_tab_widget (GncMainWindow *window,
+ GncPluginPage *page,
+ GtkWidget **widget_p)
{
GncMainWindowPrivate *priv;
- GtkWidget *event_box;
- ENTER("window %p, page %p, event %p",
- window, page, event_p);
- *event_p = NULL;
+ ENTER("window %p, page %p, widget %p",
+ window, page, widget_p);
+ *widget_p = NULL;
if (!page->notebook_page)
{
@@ -2199,17 +2184,11 @@ main_window_find_tab_event (GncMainWindow *window,
}
priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
- event_box = gtk_notebook_get_tab_label(GTK_NOTEBOOK(priv->notebook),
+ *widget_p = gtk_notebook_get_tab_label(GTK_NOTEBOOK(priv->notebook),
page->notebook_page);
- if (GTK_IS_EVENT_BOX(event_box))
- {
- *event_p = event_box;
- LEAVE("event %p", *event_p);
- return (TRUE);
- }
- LEAVE("event %p", *event_p);
- return (FALSE);
+ LEAVE("widget %p", *widget_p);
+ return TRUE;
}
void
@@ -2218,7 +2197,7 @@ main_window_update_page_name (GncPluginPage *page,
{
GncMainWindow *window;
GncMainWindowPrivate *priv;
- GtkWidget *label, *entry, *event_box;
+ GtkWidget *label, *entry;
gchar *name, *old_page_name, *old_page_long_name;
ENTER(" ");
@@ -2264,14 +2243,15 @@ main_window_update_page_name (GncPluginPage *page,
{
gchar *new_page_long_name;
gint string_position;
+ GtkWidget *tab_widget;
string_position = strlen(old_page_long_name) - strlen(old_page_name);
new_page_long_name = g_strconcat(g_strndup(old_page_long_name, string_position), name, NULL);
gnc_plugin_page_set_page_long_name(page, new_page_long_name);
- if (main_window_find_tab_event(window, page, &event_box))
- gtk_widget_set_tooltip_text(event_box, new_page_long_name);
+ if (main_window_find_tab_widget(window, page, &tab_widget))
+ gtk_widget_set_tooltip_text(tab_widget, new_page_long_name);
g_free(new_page_long_name);
}
@@ -2300,44 +2280,55 @@ main_window_update_page_color (GncPluginPage *page,
{
GncMainWindow *window;
GncMainWindowPrivate *priv;
- GtkWidget *event_box;
+ GtkWidget *tab_widget;
GdkColor tab_color;
- gchar *color_string;
+ gchar *color_string = NULL;
+ gboolean want_color = FALSE;
ENTER(" ");
- if ((color_in == NULL) || (*color_in == '\0'))
- {
- LEAVE("no string");
- return;
- }
- color_string = g_strstrip(g_strdup(color_in));
+ if (color_in)
+ color_string = g_strstrip(g_strdup(color_in));
- /* Optimization, if the color hasn't changed, don't update. */
- if (*color_string == '\0' || 0 == g_strcmp0(color_string, gnc_plugin_page_get_page_color(page)))
- {
- g_free(color_string);
- LEAVE("empty string or color unchanged");
- return;
- }
+ if (color_string && *color_string != '\0')
+ want_color = TRUE;
/* Update the plugin */
window = GNC_MAIN_WINDOW(page->window);
- gnc_plugin_page_set_page_color(page, color_string);
-
- priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
+ if (want_color)
+ gnc_plugin_page_set_page_color(page, color_string);
+ else
+ gnc_plugin_page_set_page_color(page, NULL);
/* Update the notebook tab */
- main_window_find_tab_event(window, page, &event_box);
+ main_window_find_tab_widget (window, page, &tab_widget);
+ priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
- if (gdk_color_parse(color_string, &tab_color) && priv->show_color_tabs)
+ if (want_color && gdk_color_parse(color_string, &tab_color) && priv->show_color_tabs)
{
- gtk_widget_modify_bg(event_box, GTK_STATE_NORMAL, &tab_color);
- gtk_widget_modify_bg(event_box, GTK_STATE_ACTIVE, &tab_color);
+ if (!GTK_IS_EVENT_BOX (tab_widget))
+ {
+ GtkWidget *event_box = gtk_event_box_new ();
+ g_object_ref (tab_widget);
+ gtk_notebook_set_tab_label (GTK_NOTEBOOK(priv->notebook),
+ page->notebook_page, event_box);
+ gtk_container_add (GTK_CONTAINER(event_box), tab_widget);
+ g_object_unref (tab_widget);
+ tab_widget = event_box;
+ }
+ gtk_widget_modify_bg(tab_widget, GTK_STATE_NORMAL, &tab_color);
+ gtk_widget_modify_bg(tab_widget, GTK_STATE_ACTIVE, &tab_color);
}
else
{
- gtk_widget_modify_bg(event_box, GTK_STATE_NORMAL, NULL);
- gtk_widget_modify_bg(event_box, GTK_STATE_ACTIVE, NULL);
+ if (GTK_IS_EVENT_BOX (tab_widget))
+ {
+ GtkWidget *tab_hbox = gtk_bin_get_child(GTK_BIN(tab_widget));
+ g_object_ref (tab_hbox);
+ gtk_container_remove (GTK_CONTAINER(tab_widget), tab_hbox);
+ gtk_notebook_set_tab_label (GTK_NOTEBOOK(priv->notebook),
+ page->notebook_page, tab_hbox);
+ g_object_unref (tab_hbox);
+ }
}
g_free(color_string);
LEAVE("done");
@@ -2882,7 +2873,7 @@ gnc_main_window_open_page (GncMainWindow *window,
{
GncMainWindowPrivate *priv;
GtkWidget *tab_hbox;
- GtkWidget *label, *entry, *event_box;
+ GtkWidget *label, *entry;
const gchar *icon, *text, *color_string;
GtkWidget *image;
GList *tmp;
@@ -2955,27 +2946,10 @@ gnc_main_window_open_page (GncMainWindow *window,
else
gtk_box_pack_start (GTK_BOX (tab_hbox), label, TRUE, TRUE, 0);
- event_box = gtk_event_box_new();
- gtk_event_box_set_visible_window(GTK_EVENT_BOX(event_box), TRUE);
- gtk_widget_show(event_box);
- gtk_container_add(GTK_CONTAINER(event_box), tab_hbox);
- color_string = gnc_plugin_page_get_page_color(page);
- if (color_string == NULL) color_string = "";
- if (gdk_color_parse(color_string, &tab_color) && priv->show_color_tabs)
- {
- gtk_widget_modify_bg(event_box, GTK_STATE_NORMAL, &tab_color);
- gtk_widget_modify_bg(event_box, GTK_STATE_ACTIVE, &tab_color);
- }
- else
- {
- gtk_widget_modify_bg(event_box, GTK_STATE_NORMAL, NULL);
- gtk_widget_modify_bg(event_box, GTK_STATE_ACTIVE, NULL);
- }
-
text = gnc_plugin_page_get_page_long_name(page);
if (text)
{
- gtk_widget_set_tooltip_text(event_box, text);
+ gtk_widget_set_tooltip_text(tab_hbox, text);
}
entry = gtk_entry_new();
@@ -3029,7 +3003,10 @@ gnc_main_window_open_page (GncMainWindow *window,
/*
* Now install it all in the window.
*/
- gnc_main_window_connect(window, page, event_box, label);
+ gnc_main_window_connect(window, page, tab_hbox, label);
+
+ color_string = gnc_plugin_page_get_page_color(page);
+ main_window_update_page_color (page, color_string);
LEAVE("");
}
diff --git a/src/gnome-utils/gnc-plugin-page.c b/src/gnome-utils/gnc-plugin-page.c
index 86a803b..55b4dc9 100644
--- a/src/gnome-utils/gnc-plugin-page.c
+++ b/src/gnome-utils/gnc-plugin-page.c
@@ -868,7 +868,8 @@ gnc_plugin_page_set_page_color (GncPluginPage *page, const gchar *color)
priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
if (priv->page_color)
g_free(priv->page_color);
- priv->page_color = g_strdup(color);
+ if (color)
+ priv->page_color = g_strdup(color);
}
Summary of changes:
src/business/business-ledger/gncEntryLedger.h | 11 -
src/business/business-ledger/gncEntryLedgerModel.c | 94 +++++--
src/gnome-utils/gnc-main-window.c | 155 +++++------
src/gnome-utils/gnc-plugin-page.c | 3 +-
src/register/ledger-core/split-register-model.c | 302 ++++++++-------------
src/register/ledger-core/split-register-model.h | 12 -
src/register/ledger-core/split-register.h | 14 -
src/register/register-core/table-allgui.c | 59 ++--
src/register/register-core/table-allgui.h | 88 ++++++
src/register/register-gnome/gnucash-grid.c | 24 +-
src/register/register-gnome/gnucash-header.c | 10 +-
src/register/register-gnome/gnucash-item-edit.c | 6 +-
src/register/register-gnome/gnucash-sheet.c | 61 ++++-
13 files changed, 445 insertions(+), 394 deletions(-)
More information about the gnucash-changes
mailing list